Реализация планировщика Rufus в рельсах 3 - PullRequest
5 голосов
/ 23 июня 2011

У меня запущено приложение с apache + passenger. В настоящее время я инициализирую планировщик rufus в инициализаторе и регистрирую чтение заданий из БД в этом инициализаторе. Apache / passenger работает так, что он создает несколько процессов / экземпляров приложения, что приводит к тому, что планировщик инициализируется несколько раз и будет планировать повторяющиеся задания.

Как правильно реализовать это, чтобы планировщик был одноэлементным объектом?

1 Ответ

4 голосов
/ 05 августа 2011

Возможно, вы захотите реализовать Rufus Scheduler как отдельный рабочий процесс вне вашего приложения.

Вместо того, чтобы помещать его в качестве инициализатора, я бы реализовал задачу Rake, которая его запускает.

# Rakefile
desc "Starts the Scheduler worker"
task :scheduler do
  require 'path/to/your/scheduler/file'

  scheduler.join
end

Затем просто запустите rake scheduler, чтобы запустить его в фоновом режиме.


Бонус: поскольку вашему приложению теперь требуется 2 процесса рядом, используйте Foreman для управления несколькими процессами вашего приложения.Вы можете сделать это, создав файл с именем Procfile:

# Procfile
web:       thin start -p 4242
scheduler: rake scheduler

Затем запустите ваше приложение с помощью мастера: (сначала убедитесь, что gem install foreman)

$ foreman start

Это вызоветоба процесса одновременно.

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