Ruby on Rails延迟作业本地无法运行

4
我正在使用延迟作业来处理Active Record gem https://github.com/collectiveidea/delayed_job。 我正在尝试设置一个工作,以在应用程序中发生事件后的五分钟内运行。 五分钟过后,我需要进行一些数据库更新。 我已经尝试了rake jobs:work和RAILS_ENV=development script/delayed_job start。 在此之前,我已经运行了bundle install、rails generate delayed_job:active_record和rake db:migrate。 我有一个彩票网站,需要每五分钟检查获胜者并更新获胜玩家的代币。

我等待了五分钟,但本地应用程序没有进行任何更新。

这是我目前的进展:

Gem文件:

 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
1个回答

13

我认为你需要使用foreman本地启动后台工作程序。以下内容适用于我的Mac。

来自Heroku文档:

然后您需要告诉应用程序处理放入作业队列的作业,您可以通过将以下内容添加到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


1
运行 bundle exec rake jobs:workoff 命令以处理待处理的作业并退出。 - Roman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接