【问题标题】:Can I start and stop delayed_job workers from within my Rails app?我可以在我的 Rails 应用程序中启动和停止 delay_job 工作人员吗?
【发布时间】:2010-12-16 01:37:33
【问题描述】:

我有一个可以从延迟作业和一些后台处理中受益的应用。问题是,我真的不需要/想要延迟工作的工作人员一直在运行。

该应用在共享托管环境和多个位置(针对不同用户)中运行。另外,该应用程序的使用量并不大。

只有在某些操作/事件发生后,有没有办法从我的应用程序开始和停止处理作业(使用脚本或 rake 任务)?

【问题讨论】:

    标签: ruby-on-rails delayed-job


    【解决方案1】:

    你可以调用系统:

    system "cd #{Rails.root} && rake delayed_job:start RAILS_ENV=production"
    

    您也可以更改 delay_job 以减少检查频率。代替默认的 5 秒,将其设置为 15 分钟或其他时间。

    【讨论】:

      【解决方案2】:

      是的,你可以,但我不确定会有什么好处。你说你不希望工人一直在运行——你有什么顾虑?内存使用情况?数据库连接?

      为了降低延迟作业对您的系统的影响,我只运行一个工作器,并将其配置为大部分时间处于休眠状态。

      Delayed::Worker::sleep_delay = 60 * 5  # in your initializer.rb
      

      单个工作人员只会每 5 分钟醒来并检查数据库中的新作业。以这种方式运行可以防止您“自定义”太多。

      但如果您真的想以编程方式启动Delayed::Worker,请在该类中查找work_off,并实现您自己的script/run_jobs_and_exit 脚本。它可能看起来很像 script/delayed_job 所做的 - 3 行。

      【讨论】:

      • 是 60 秒还是 60 分钟?...我正在使用 Heroku,所以我不能像往常一样手动启动/停止服务器,所以我正在尝试配置它以便工作(测试版邀请电子邮件)每天只发送一次左右。
      • 一名一直在 heroku 上运行的工作人员目前每月花费 36 美元。这就是仅在需要时才打开它的充分理由。
      【解决方案3】:

      我发现这个是因为我正在寻找一种方法来运行一些后台作业,而无需花费所有的钱在不需要的时候一直运行它们。有人使用谷歌应用引擎进行了黑客攻击以运行后台作业:

      http://viatropos.com/blog/how-to-run-background-jobs-on-heroku-for-free/

      虽然有点过时了。线程中有一个有趣的评论:

      “当我需要发送电子邮件、复制文件等时,我基本上将其添加到队列中。在每个请求结束时,它会检查队列中是否有任何内容。如果有,则使用 Heroku API 将 worker 设置为 1。在 worker 完成任务后,它会检查队列中是否还有任何内容。如果没有,则将 worker 设置回 0。最终结果是后台 worker 将在这里和那里工作几秒钟。我可以完成我需要的所有后台处理,而月底的账单很少达到 1 小时的总工作量。即使没有问题,我也会付钱后台处理 $0.05。:)"

      【讨论】:

        【解决方案4】:

        如果你去阻止一个工人,你会得到 PID。如果一切都失败了,你可以简单地杀死 -9 PID。

        【讨论】:

        • 请不要在您的帖子中使用签名/标语。您的用户框算作您的签名,您可以使用您的个人资料发布您喜欢的任何关于您自己的信息。 FAQ on signatures/taglines
        猜你喜欢
        • 2012-11-08
        • 1970-01-01
        • 1970-01-01
        • 2012-11-09
        • 2014-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多