【问题标题】:Heroku - how to start job worker (delayed job)?Heroku - 如何开始工作(延迟工作)?
【发布时间】:2012-04-16 11:02:54
【问题描述】:

我有一些使用delayed_job 的小应用程序。在我的本地主机上一切正常,但是当我将我的应用程序部署到 Heroku 并单击应由延迟作业执行的链接时,没有任何反应,“任务”只是保存到表 delayed_job 中。

In this article on heroku blog 写的是,delayed_job 表中的任务被执行,当运行这个命令 rake jobs:work

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

【问题讨论】:

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


    【解决方案1】:

    如果您正在运行 Cedar 堆栈,请从终端控制台运行以下命令:

    heroku run rake jobs:work
    

    如果您正在运行较旧的堆栈(Bamboo、Aspen 等):

    heroku rake jobs:work
    

    见:https://devcenter.heroku.com/articles/rake

    根据delayed_jobdocumentation,也可以通过编程方式启动worker:

    #!/usr/bin/env ruby
    require File.dirname(__FILE__) + '/../config/environment'
    
    Delayed::Worker.new.start 
    

    【讨论】:

    • 是的,这对我有用。但是我怎样才能从我的应用程序中自动运行这个任务呢?
    • 当有东西进入队列时,如果你想启动一个工作线程呢?你是否必须有一个工作人员一直在运行,并从队列中挑选任务? Heroku 每天重新启动一次 dynos 不是有问题吗..
    • 如果你想让一个worker在任务被放入队列时自动运行,那么你需要将delayed_job命令作为一个新进程放入你的Procfile并添加至少1个worker dyno 到您在 Heroku 上的应用程序。
    • 这个 'heroku run rake jobs:work' 是否适用于 heroku 机器?可能是的,我输入这个,我不需要做任何事情对吗?工人测功机手表 24/7。我猜在本地你必须输入“rake jobs:work”才能观看。但即使我不运行“rake jobs:work”,它也可以工作。
    【解决方案2】:

    您应该使用 Procfile 来为您的测功机指定命令。 例如,您的 Procfile 中会有这样的内容:

    appDir/Procfile

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

    要在您的开发机器上使用它,您应该使用 Foreman,这一切都在文档中进行了解释。

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

    【讨论】:

      【解决方案3】:

      在我们的例子中,我们每个月只运行一次延迟的工作,所以不想让工作人员 dyno 持续运行。

      为了解决这个问题,我们将作业排队(使用.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'})
      

      【讨论】:

        猜你喜欢
        • 2011-11-14
        • 1970-01-01
        • 2012-04-10
        • 2014-04-03
        • 1970-01-01
        • 2011-05-12
        • 2011-08-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多