2012-04-02 73 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'})