我正在使用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>'
答案 0 :(得分:3)
最后,问题结果是Rake 0.9.0中的一个错误。由于Rails依赖于Rake,在此版本的Rake之后运行bundle install
打破了我的延迟工作。
修复方法是将gem 'rake', '0.8.7'
添加到您的gem文件中。
更多细节可以在下面找到......
DHH的推文:http://twitter.com/dhh/status/71966528744071169
在rails_admin的问题跟踪器中进行讨论:https://github.com/sferik/rails_admin/issues/428
答案 1 :(得分:2)
有两种选择:
这两个宝石监视delayed_jobs队列并自动'雇佣'后台工作人员处理该线程:
答案 2 :(得分:0)
您是否在运行应用程序的相同环境中运行delayed_job守护程序?
尝试使用以下方式手动处理作业:
rake RAILS_ENV=development jobs:work
如果您在生产模式下运行应用程序,则需要启动delayed_job守护程序,如下所示:
RAILS_ENV=production script/delayed_job start
答案 3 :(得分:0)
这有点远,但请确保您在Heroku上使用与本地计算机上相同的Ruby版本。由于这个问题,我之前在Heroku上遇到了延迟工作的问题。