2012-04-02 74 views
5

我有一些使用delayed_job的miniapp。在我的本地主机上一切正常,但是当我将我的应用程序部署到Heroku并单击应该由delayed_job执行的链接时,没有任何事情发生,“任务”仅保存在表delayed_job中。Heroku - 如何开始工作(延迟工作)?

In this article on heroku blog上所写的,从delayed_job表中的任务被执行,则执行该命令耙作业时:工作

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

回答

11

如果您运行的是雪松堆栈,请从终端控制台以下:

如果运行老栈(竹,杨木等):

heroku rake jobs:work 

请参阅:https://devcenter.heroku.com/articles/rake

根据delayed_jobdocumentation,您还可以以编程方式启动工作程序:

#!/usr/bin/env ruby 
require File.dirname(__FILE__) + '/../config/environment' 

Delayed::Worker.new.start 
+2

是的,这对我有用。但是,我怎样才能从我的应用程序自动运行这个任务? – user984621 2012-04-02 20:49:00

+0

当什么事情进入队列时你想要启动一名工作人员怎么办?你是否必须有一个工作人员全程运行,并从队列中剔除任务?对于Heroku每天重新启动一次dynos并没有什么问题.. – Magne 2013-11-29 14:32:09

+0

如果您希望有一名工作人员在将任务放入队列时自动运行任务,那么您需要将delayed_job命令作为新的工具放入Procfile中在Heroku上处理并添加至少1个工人测试仪到您的应用程序中。 – 2014-02-25 04:17:51

8

您应该使用Procfile来指定您的dynos的命令。 例如,你会在你的Procfile是这样的:

APPDIR/Procfile

web:  bundle exec rails server -p $PORT 
worker: bundle exec rake jobs:work 

要在开发机器上使用这个,你应该使用工头,这一切都在文档解释。

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

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