![](/img/trans.png)
[英]Can single delayed job worker start the next job before the ongoing job ends?
[英]Heroku - how to start job worker (delayed job)?
我有一些使用delayed_job的miniapp。 在我的localhost上一切正常,但是当我将我的应用程序部署到Heroku并单击应该由delayed_job执行的链接时,没有任何反应,“任务”只是保存在表delayed_job
。
在这篇关于heroku博客的文章中写道,来自delayed_job
表的任务被执行,当运行这个命令时rake jobs:work 。
但是我怎么能运行这个命令呢? 命令应该放在哪里? 在代码中,还是从终端控制台?
如果您正在运行Cedar堆栈,请从终端控制台运行以下命令:
heroku run rake jobs:work
如果您正在运行旧堆栈(Bamboo,Aspen等):
heroku rake jobs:work
请参阅: https : //devcenter.heroku.com/articles/rake
根据delayed_job
文档 ,您还可以以编程方式启动worker:
#!/usr/bin/env ruby
require File.dirname(__FILE__) + '/../config/environment'
Delayed::Worker.new.start
您应该使用Procfile来指定dynos的命令。 例如,你的Procfile中会有这样的东西:
APPDIR / Procfile
web: bundle exec rails server -p $PORT
worker: bundle exec rake jobs:work
要在您的开发机器上使用它,您应该使用Foreman,这些都在文档中解释过。
在我们的例子中,我们每个月只运行一次延迟工作,因此不希望工作人员持续不断地运行。
为了解决这个问题,我们将作业排队(使用.delayed
),然后使用Heroku平台API生成rake jobs:workoff
在一次性工作者中进行工作。 API调用返回相对较快。
PlatformAPI.connect_oauth(ENV["YOUR_HEROKU_KEY"]).dyno.create(ENV["YOUR_HEROKU_APP_NAME"],{command: 'rake jobs:workoff'})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.