我有一些使用delayed_job的miniapp。在我的localhost上一切正常,但是当我将我的应用程序部署到Heroku并单击应该由delayed_job执行的链接时,没有任何反应,“任务”只是保存在表delayed_job
中。
In this article on heroku blog,执行delayed_job
表中的任务,运行此命令 rake jobs:work 。
但是我怎么能运行这个命令呢?命令应该放在哪里?在代码中,还是从终端控制台?
答案 0 :(得分:12)
如果您正在运行Cedar堆栈,请从终端控制台运行以下命令:
heroku run rake jobs:work
如果您正在运行旧堆栈(Bamboo,Aspen等):
heroku rake jobs:work
请参阅:https://devcenter.heroku.com/articles/rake
根据delayed_job
documentation,您还可以通过编程方式启动工作人员:
#!/usr/bin/env ruby
require File.dirname(__FILE__) + '/../config/environment'
Delayed::Worker.new.start
答案 1 :(得分:9)
您应该使用Procfile来指定dynos的命令。 例如,你的Procfile中会有这样的东西:
APPDIR / Procfile
web: bundle exec rails server -p $PORT
worker: bundle exec rake jobs:work
要在您的开发机器上使用它,您应该使用Foreman,这些都在文档中进行了解释。
答案 2 :(得分:1)
在我们的案例中,我们每月只运行一次延迟工作,所以不想让工作人员持续不断地运行。
为了解决这个问题,我们将作业排队(使用.delayed
),然后使用Heroku platform API在一次性工作中生成rake jobs:workoff
。 API调用返回相对较快。
PlatformAPI.connect_oauth(ENV["YOUR_HEROKU_KEY"]).dyno.create(ENV["YOUR_HEROKU_APP_NAME"],{command: 'rake jobs:workoff'})