BackgroundJobs останавливает задание после завершения
-
26-09-2019 - |
Вопрос
Раньше я использовал Delayed_job.У меня есть старый проект, который работает на сервере, где я не могу обновить Ruby с 1.8.6 до 1.8.7 и, следовательно, не могу использовать отложенное задание, поэтому я пробую BackgroundJobs. http://codeforpeople.rubyforge.org/svn/bj/trunk/README
У меня все работает, моя работа выполняется, но что-то кажется неправильным.Например, если я запускаю задание следующим образом:
jobs = Bj.submit "echo hi", :is_restartable => false, :limit => 1, :forever => false
Затем я вижу задание в таблице bj_job и вижу, что оно выполнено вместе с «привет» в стандартном выводе.Я также вижу только одно задание в таблице, и оно не запускается повторно.
По какой-то причине, если я сделаю это:
jobs = Bj.submit "./script/runner ./jobs/calculate_mean_values.rb #{self.id}", :is_restartable => false, :limit => 1, :forever => false
Задание по-прежнему выполняется, как и ожидалось, однако оно продолжает вставлять новые строки в таблицу bj_job, и метод запускается снова и снова, пока я не остановлю свой сервер разработки.Вот так это должно работать?
Я использую Ruby 1.8.6 и Rails 2.1.2, и у меня нет возможности обновиться.Я использую плагин Bj.
Поскольку мне просто нужно запустить процесс один раз после сохранения модели, он работает с помощью сценария/бегуна напрямую следующим образом:
system " RAILS_ENV=#{RAILS_ENV} ruby #{RAILS_ROOT}/script/runner 'CompositeGrid.calculate_values(#{self.id})' & "
Но хотелось бы знать, не делаю ли я что-то не так с фоновыми заданиями.
Решение
Хорошо, это была глупая ошибка пользователя.Как оказалось, у меня был обратный вызов, который перезапускал процесс и создавал бесконечный цикл.После исправления обратного вызова он работает точно так, как ожидалось.