我有一些使用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