ruby on rails-在Heroku上未处理delayed_job队列



我正在运行一个带有delayed_job的Rails 3应用程序。我遇到的问题是,尽管应用程序正确地将作业添加到队列中,但它们从未得到处理。

我的班级

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>'

最终,问题变成了Rake0.9.0中的一个错误。由于Rails依赖于Rake,因此在Rake发布后运行bundle install中断了我延迟的工作。

修复方法是将gem 'rake', '0.8.7'添加到您的gemfile中。

更多详细信息可以在下面找到。。。

DHH的推文:http://twitter.com/dhh/status/71966528744071169

rails_admin问题跟踪器中的讨论:https://github.com/sferik/rails_admin/issues/428

有两个选项可供选择:

这两个宝石观察delayed_jobs队列并自动"雇佣"后台工作人员来处理线程:

  • 选项1:https://github.com/michelson/hirefire(这是我使用的,因为它支持mongoid)
  • 选项2:由heroku工程师开发的delayed_job的这个分支具有类似的自动缩放功能:https://github.com/pedro/delayed_job/tree/autoscaling

祝好运

您是否在运行应用程序的同一环境中运行delayed_job守护进程?

尝试手动处理作业,使用:
rake RAILS_ENV=development jobs:work

如果您在生产模式下运行应用程序,则需要启动delayed_job守护程序,如下所示:
RAILS_ENV=production script/delayed_job start

这是一个很长的机会,但请确保您在Heroku上使用的Ruby版本与您在本地机器上使用的版本相同。因为这个原因,我之前在Heroku上遇到了工作延迟的问题。

相关内容

  • 没有找到相关文章

最新更新