Вопрос

Раньше я использовал 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})'  & "

Но хотелось бы знать, не делаю ли я что-то не так с фоновыми заданиями.

Это было полезно?

Решение

Хорошо, это была глупая ошибка пользователя.Как оказалось, у меня был обратный вызов, который перезапускал процесс и создавал бесконечный цикл.После исправления обратного вызова он работает точно так, как ожидалось.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top