我有一些使用delayed_job的miniapp。在我的本地主機上一切正常,但是當我將我的應用程序部署到Heroku並單擊應該由delayed_job執行的鏈接時,沒有任何事情發生,「任務」僅保存在表delayed_job
中。Heroku - 如何開始工作(延遲工作)?
In this article on heroku blog上所寫的,從delayed_job
表中的任務被執行,則執行該命令耙作業時:工作。
但是我怎樣才能運行這個命令?命令應該放在哪裏?在代碼中,還是從終端控制檯?
我有一些使用delayed_job的miniapp。在我的本地主機上一切正常,但是當我將我的應用程序部署到Heroku並單擊應該由delayed_job執行的鏈接時,沒有任何事情發生,「任務」僅保存在表delayed_job
中。Heroku - 如何開始工作(延遲工作)?
In this article on heroku blog上所寫的,從delayed_job
表中的任務被執行,則執行該命令耙作業時:工作。
但是我怎樣才能運行這個命令?命令應該放在哪裏?在代碼中,還是從終端控制檯?
如果您運行的是雪松堆棧,請從終端控制檯以下:
如果運行老棧(竹,楊木等):
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
您應該使用Procfile來指定您的dynos的命令。 例如,你會在你的Procfile是這樣的:
APPDIR/Procfile
web: bundle exec rails server -p $PORT
worker: bundle exec rake jobs:work
要在開發機器上使用這個,你應該使用工頭,這一切都在文檔解釋。
在我們的情況下,我們只運行一個延遲的工作每月一次,所以不想有不斷磨合工人賽道。
爲了解決這個問題,我們排隊工作(使用.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'})
是的,這對我有用。但是,我怎樣才能從我的應用程序自動運行這個任務? – user984621 2012-04-02 20:49:00
當什麼事情進入隊列時你想要啓動一名工作人員怎麼辦?你是否必須有一個工作人員全程運行,並從隊列中剔除任務?對於Heroku每天重新啓動一次dynos並沒有什麼問題.. – Magne 2013-11-29 14:32:09
如果您希望有一名工作人員在將任務放入隊列時自動運行任務,那麼您需要將delayed_job命令作爲新的工具放入Procfile中在Heroku上處理並添加至少1個工人測試儀到您的應用程序中。 – 2014-02-25 04:17:51