очередь в delayed_job не обрабатывается в Heroku - PullRequest
2 голосов
/ 23 мая 2011

Я запускаю приложение Rails 3 с delayed_job.Проблема, с которой я столкнулся, заключается в том, что, хотя приложение правильно добавляет задания в очередь, они никогда не обрабатываются.

Мой класс

class User < ActiveRecord::Base
  after_create :send_welcome_email

  private

    def send_welcome_email
      UserMailer.delay.welcome_email(self)
    end
end

ПроверкаВещи через консоль Rails Я вижу, что в очереди есть задания.Я также вижу, что было 0 попыток выполнить работу.Вращение рабочего Heroku не приводит к обработке заданий.

Есть идеи?

Спасибо!

Редактировать: Попытка очистить очередь заданий какпредложенный ниже, я запустил rake jobs:clear и получил следующую ошибку

rake aborted!
uninitialized constant Rake::DSL
/app/.bundle/gems/ruby/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:8:in `<class:TaskLib>'
/app/.bundle/gems/ruby/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:6:in `<module:Rake>'
/app/.bundle/gems/ruby/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:3:in `<top (required)>'
/app/.bundle/gems/ruby/1.9.1/gems/rake-0.9.0/lib/rake/rdoctask.rb:20:in `<top (required)>'
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.7/lib/rails/tasks/documentation.rake:1:in `<top (requ
ired)>'
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:15:in `block in <top (required)>
'
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:6:in `each'
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:6:in `<top (required)>'
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:214:in `initialize_tasks'
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:139:in `load_tasks'
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:77:in `method_missing'
/app/Rakefile:7:in `<top (required)>'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2373:in `load'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2373:in `raw_load_rakefile'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2007:in `block in load_rakefile'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2006:in `load_rakefile'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:1991:in `run'
/usr/ruby1.9.2/bin/rake:31:in `<main>'

Ответы [ 4 ]

3 голосов
/ 25 мая 2011

В итоге проблема оказалась в Rake 0.9.0. Поскольку Rails зависит от Rake, запуск bundle install после этого выпуска Rake прервал мои отложенные задания.

Исправлено добавление gem 'rake', '0.8.7' в ваш гемфайл.

Более подробную информацию можно найти ниже ...

Твиттер DHH: http://twitter.com/dhh/status/71966528744071169

Обсуждение в трекере rails_admin: https://github.com/sferik/rails_admin/issues/428

2 голосов
/ 23 мая 2011

Два варианта для вас:

Эти два драгоценных камня следят за очередью delayed_jobs и автоматически 'нанимают' фоновых рабочих для обработки потока:

Удачи

0 голосов
/ 24 мая 2011

Это довольно длинный путь, но убедитесь, что вы используете ту же версию Ruby на Heroku, что и на локальном компьютере.Из-за этого у меня была проблема с отложенной работой на Heroku.

0 голосов
/ 23 мая 2011

Запускаете ли вы демон delayed_job в той же среде, в которой работает приложение?

Попробуйте выполнить работу вручную, используя:
rake RAILS_ENV=development jobs:work

Если вы запускаете приложение в производственном режиме, вам нужно запустить демон delayed_job как:
RAILS_ENV=production script/delayed_job start

...