Heroku - 如何开始工作(延迟工作)?

时间:2012-04-02 19:06:12

标签: ruby ruby-on-rails-3 heroku delayed-job

我有一些使用delayed_job的miniapp。在我的localhost上一切正常,但是当我将我的应用程序部署到Heroku并单击应该由delayed_job执行的链接时,没有任何反应,“任务”只是保存在表delayed_job中。

编写

In this article on heroku blog,执行delayed_job表中的任务,运行此命令 rake jobs:work

但是我怎么能运行这个命令呢?命令应该放在哪里?在代码中,还是从终端控制台?

3 个答案:

答案 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,这些都在文档中进行了解释。

https://devcenter.heroku.com/articles/procfile

答案 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'})