【问题标题】:"Whenever" gem running cron jobs on Heroku“无论何时” gem 在 Heroku 上运行 cron 作业
【发布时间】:2012-01-27 00:45:53
【问题描述】:

我创建了一个使用when gem 的应用程序。 gem 创建 cron 作业。我让它在本地工作,但似乎无法让它在 heroku cedar 上工作。执行此操作的命令是什么?

运行:

heroku run whenever --update-crontab job1

没用

【问题讨论】:

    标签: ruby-on-rails ruby heroku cron whenever


    【解决方案1】:

    简答:使用调度程序插件:http://addons.heroku.com/scheduler

    长答案:当你运行 heroku 时,我们

    1. 旋转测功机
    2. 把你的代码放在上面
    3. 执行你的命令,等待它完成
    4. 把测功机扔掉

    您对 crontab 所做的任何更改都会立即被丢弃。一切都是短暂的,你不能在 heroku 上编辑文件,只能推送新代码。

    【讨论】:

    • 对于长时间运行的任务应该怎么做? (需要几个小时才能执行)
    • 这很好,您将在 24 小时内完成它
    • @Will,但应用程序需要至少每小时生成一次输出,对吧? (“与一次性测功机的连接将在不活动一小时后关闭(在输入和输出中)。)
    • Scheduler docs 声明其“尽力服务”,这意味着无法保证您的任务会运行。如果您需要更可靠的东西 - 就像我的付款处理一样 - 试试clock processes
    • 那么在 Heroku 上部署 Rails 应用程序时,Heroku 调度程序本质上是否使每当 Gem 变得不必要?尤其是当你有简单的 cron 工作时?我认为使用调度程序会有效地使Whenever gem 无用或者我错过了什么?
    【解决方案2】:

    您需要添加Heroku Scheduler插件。

    您可以直接从仪表板添加它或使用以下命令:

    1. 安装add-on:

      heroku addons:create scheduler:standard
      
    2. lib/tasks中创建一个rake任务

      # lib/tasks/scheduler.rake
      task :send_reminders => :environment do
        User.send_reminders
      end
      
    3. 安排工作

      • 访问Heroku Dashboard
      • 打开您的应用
      • add-ons列表中选择调度程序
      • 点击添加工作,输入任务并选择频率。

        例如添加rake send_reminders,选择"Daily""00:00"每天午夜发送提醒。

    【讨论】:

      【解决方案3】:

      如果你想:

      • 使用Heroku Scheduler
      • 每分钟运行一次任务(不是 10 分钟)
      • 不要在意测功时间

      这是我每分钟运行作业的解决方案技巧 - 假设任务在 60 秒内完成。

      task start_my_service: :environment do
        1.upto(9) do |iteration|
          start_time = DateTime.now
          Services::MyService.call
          end_time = DateTime.now
          wait_time = 60 - ((end_time - start_time) * 24 * 60 * 60).to_i
          sleep wait_time if wait_time > 0
        end
      end
      

      【讨论】:

        【解决方案4】:

        其他答案指定您应该使用 Heroku Scheduler 插件,它确实能够运行后台任务,但它不支持 cron 的灵活性。

        还有一个名为Cron To Go 的附加组件,它能够以cron 的灵活性在一次性dynos 上运行您的工作。您还可以为您的作业指定时区,并在作业失败、成功或开始时收到通知(电子邮件或网络挂钩)。

        (完全披露 - 我为创建和运营 Cron To Go 的公司工作)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-01-21
          • 1970-01-01
          • 1970-01-01
          • 2011-11-17
          • 2016-08-21
          • 2021-11-03
          • 2014-12-17
          • 1970-01-01
          相关资源
          最近更新 更多