#ruby-on-rails #ruby-on-rails-3
#ruby-on-rails #ruby-on-rails-3
Вопрос:
Возможно ли запустить «rails console» в одной оболочке, а затем «rails server» в другой, и затем изменения кода в консоли проникнут в запущенное приложение? Предположительно, это невозможно, но я просто хотел бы проверить, есть ли способ.
Редактировать: оба работают в одной среде. И под изменениями кода я подразумеваю изменения в определениях классов (например, переписывание метода в модели Post).
Комментарии:
1. Что вы подразумеваете под «изменениями кода»? Вы можете использовать консоль для обновления, вставки или удаления данных в базе данных. Вот и все, и это повлияет на запущенное приложение.
2. Я говорю код, чтобы отличить его от данных. Т.Е., если я уточню метод в моем классе Post, это распространится на версию Rails, работающую на консоли.
3. Нет, это не повлияет. Ответ Марио правильный.
Ответ №1:
Если вы измените какие-либо данные, это действительно проникнет. Однако модификации методов, выполняемые «на лету» путем открытия классов и их «обезьяньего исправления», не повлияют на ваше запущенное приложение — если только ваш модифицированный метод не изменяет данные.
Однако всегда желательно запускать консоль в другой среде с другими данными, чтобы избежать нанесения вреда запущенному приложению.
Комментарии:
1. Уточним, что исправленный обезьяной код в консольном приложении не повлияет на серверное приложение, потому что вы запускаете разные экземпляры, и только серверное приложение обслуживает живой трафик. Изменения данных (побочные эффекты) будут распространяться, потому что по умолчанию ваша консоль и серверное приложение будут использовать общие ресурсы, такие как одна и та же база данных. Обратите внимание, что ограничение на изменение кода консоли не всегда действует для других стеков. Например, в Elixir вы можете подключить свою консоль к работающему узлу, который обслуживает трафик, перезагрузить модуль, и тогда изменения повлияют на код, работающий на этом сервере.
Ответ №2:
Если вы изменяете данные в своей консоли В ТОЙ же СРЕДЕ, то они будут изменены в браузере.