4

我正在为活动记录 gem https://github.com/collectiveidea/delayed_job处理延迟作业 我正在尝试设置一个作业以在我的应用程序中发生事件五分钟后运行。五分钟过去后,我需要进行一些数据库更新。我试过 rake jobs:work 和 RAILS_ENV=development script/delayed_job start。在此之前,我已经运行了 bundle install、rails 生成延迟作业:活动记录和 rake db:迁移。我有一个彩票网站,需要每五分钟检查一次中奖者,并为中奖玩家更新代币。

我等了五分钟,但我的本地应用程序没有更新。

这是我到目前为止所拥有的:

宝石文件:

 gem 'delayed_job_active_record'

 gem "daemons"

作业(位于 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
4

1 回答 1

12

我认为您必须使用工头在本地启动后台工作人员。以下适用于我的 Mac。

来自 Heroku 文档:

然后,您需要告诉您的应用程序处理放入您的作业队列的作业,您可以通过将其添加到您的Procfile

worker:  bundle exec rake jobs:work

现在,当您使用 Foreman 启动应用程序时,它将开始处理您的作业队列。

foreman start

说了这么多,除非您在 Mac 上进行部署,否则它们是否在本地运行并不重要。(在我让它工作后我注意到了这一点。)只有它在你的服务器上工作才重要。如果您在 Heroku 上进行部署,那么延迟作业效果很好。

参考:

https://devcenter.heroku.com/articles/delayed-job
https://devcenter.heroku.com/articles/procfile

于 2012-11-17T14:27:27.580 回答