Определите, запускается ли скрипт / сервер - PullRequest
2 голосов
/ 14 декабря 2009

В Rails, в initializer / environment.rb. Какой наиболее удобный способ определить, загружается ли само веб-приложение (скрипт / сервер).

Все инициализаторы загружаются также для скриптов / консолей миграции и других задач rails, но в моем случае некоторые вещи нужно загружать только при инициализации самого сервера.

Мои идеи: проверка $ 0

Спасибо! Рето

Ответы [ 2 ]

3 голосов
/ 14 декабря 2009

Поскольку существует несколько серверов приложений, каждый из которых имеет собственную стратегию инициализации, я бы рекомендовал единственный способ надежно подключиться к процессу загрузки сервера: ActionController :: Dispatcher .

Диспетчер имеет несколько обратных вызовов; а именно:

  • prepare_dispatch (добавлено с to_prepare)
  • before_dispatch
  • after_dispatch

Обратные вызовы «prepare» запускаются перед каждым запросом в режиме разработки и перед первым запросом в производственном режиме. Объект конфигурации Rails позволяет вам добавлять такие обратные вызовы через собственный метод to_prepare:

Rails::Initializer.run do |config|
  config.to_prepare do
    # do your special initialization stuff
  end
end

К сожалению, насколько мне известно, этот обратный вызов всегда будет запускаться, поскольку инициализатор Rails вызывает Dispatcher.run_prepare_callbacks, независимо от того, загружаемся ли мы с сервера, скриптом / консолью или даже с граблями. Вы хотите избежать этого, поэтому вы можете попробовать это в своей среде. Rb:

Rails::Initializer.run do |config|
  # your normal stuff
end

if defined? ActionController::Dispatcher
  ActionController::Dispatcher.to_prepare do
    # your special stuff
  end
end

Теперь ваш «специальный материал» будет выполняться только перед первым запросом в производственном режиме, но перед каждым запросом в разработке. Если вы загружаете дополнительные библиотеки, вы можете избежать загрузки чего-либо дважды, поместив оператор if в load или require. Метод require не будет загружать один файл дважды, но я все же рекомендую вам установить защиту вокруг него.

0 голосов
/ 14 декабря 2009

Вероятно, есть лучший способ сделать это, но, поскольку я не знаю ни одного, я бы, вероятно, изменил скрипт / сервер, чтобы установить какую-либо переменную среды.

Тогда у меня будет проверка инициализатора для этой переменной среды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...