我正在处理活动记录gem的延迟作业https://github.com/collectiveidea/delayed_job我正在尝试设置一个工作,在我的应用程序中发生事件后运行五分钟。五分钟过后,我需要进行一些数据库更新。我尝试过rake jobs:work和RAILS_ENV =开发脚本/ delayed_job start。在此之前,我已经运行了bundle install,rails generate delayed_job:active_record和rake db:migrate。我有一个彩票网站,需要每五分钟检查一次获胜者,并为获胜的玩家更新令牌。
我等了五分钟,但我的本地应用程序没有更新。
这是我到目前为止所拥有的:
宝石文件:
gem 'delayed_job_active_record'
gem "daemons"
Job(位于lib)
class WinnersJob < Struct.new(:blast_id)
def perform
...
end
控制器
require 'winners'
Delayed::Job.enqueue(WinnersJob.new(blast.id), 1, 5.minutes.from_now)
end
答案 0 :(得分:10)
我认为你必须使用工头在本地启动后台工作人员。以下工作在我的Mac上。
来自Heroku docs:
然后,您需要告诉您的应用程序处理放入作业队列的作业,您可以将其添加到Procfile
:
worker: bundle exec rake jobs:work
现在,当您使用Foreman启动应用程序时,它将开始处理您的作业队列。
foreman start
说了这么多,除非你在Mac上部署,否则它们在本地运行并不重要。 (我注意到 之后我才开始工作。)只有它适用于您的服务器才有意义。如果你在Heroku上部署,那么Delayed Job工作得很好。
参考:
https://devcenter.heroku.com/articles/delayed-job
https://devcenter.heroku.com/articles/procfile