Запускаем бога через сервер/пассажир рельсов?

Следующая ситуация:

У меня есть сервер и некоторые рейк-задачи, которые должны выполняться все время, например:

# email_sender.rake (except only)
while true
  fetch all mail entries.each do |mail|
     mail.deliver
  end
end

или другая рейк-задача

# update_market.rake (except only)
while true
  Market.fetch_exchange_rate!
  sleep 1
end

Для запуска и остановки этих рейк-задач я использую драгоценный камень бога, и он работает довольно хорошо. Но мне непонятно одно: могу ли я запустить свой сервер бога в рельсах с помощью инициализатора? например

# rails_root/config/initializers/start_god.rb
system 'god -c /www/rails_root/config/god.config'

Я попробовал это в своей среде разработки, и, как я и хотел, сервер работает, даже если я выхожу из сервера rails.

Но есть ли предостережение при запуске этого в производственном режиме?

Спасибо за ваше мнение!

p.s. Я НЕ ХОЧУ ИСПОЛЬЗОВАТЬ CRON! Это решение идеально подходит для меня, и я не хочу переходить на другую систему планировщика/очереди/фоновых заданий!


person BvuRVKyUVlViVIc7    schedule 16.07.2011    source источник


Ответы (2)


Использование инициализатора Rails, вероятно, не лучший способ начать этот процесс, на самом деле это не то, для чего он был предназначен. Вы смотрели на Формана с Procfile? Это может подойти вам.

http://ddollar.github.com/foreman/

person ctcherry    schedule 16.07.2011
comment
Хм... А не могли бы вы сказать мне, почему это не лучший способ запустить бога с инициализаторами? И ты имеешь в виду, что я начну бога с бригадиром? - person BvuRVKyUVlViVIc7; 16.07.2011
comment
Инициализаторы Rails предназначены для настройки среды для приложения Rails. Размещение вызова запуска вашего бога тесно связывает запуск вашего приложения с запуском бога. И он не заботится о выключении бога, когда это необходимо, или о перезапуске/перезагрузке. Думайте об этом как о шаблоне MVC. Может ли уровень представления обращаться непосредственно к базе данных для получения информации? Конечно, /может/, но это не значит, что у него хороший дизайн для этого. И да, в основном Форман запускал вызов функций запуска как для вашего приложения Rails, так и для процесса God. - person ctcherry; 16.07.2011

Что вы используете для развертывания вашего приложения? Например, если вы используете Capistrano, вы должны использовать Capistrano для запуска и перезагрузки бога (в вашей производственной среде).

Для разработки, как упоминал ctcherry, foreman — очень удобный инструмент для управления этими процессами. Вы также можете экспортировать файл конфигурации God прямо из своего Профиля.

person Ralf    schedule 12.11.2012