【问题标题】:Easiest way to run a batch job every 5 minutes in Rails 3 with Heroku?使用 Heroku 在 Rails 3 中每 5 分钟运行一次批处理作业的最简单方法是什么?
【发布时间】:2011-09-29 21:22:29
【问题描述】:

延迟的工作似乎不适合我,因为它会延迟工作。我想在我的 Rails 应用程序上每 5 分钟开始一次工作。这在 Heroku 上可行吗?

谢谢。

【问题讨论】:

    标签: ruby-on-rails batch-file cron heroku


    【解决方案1】:

    我建议结合他们的Free Daily Cron 和上面提到的DelayedJob 调度。每天一次,启动所有延迟的工作任务(如果你间隔 5 分钟,你需要 288 个工作)以度过一天,并相应地安排它们。

    编辑:您实际上并不需要上述模块。从this 博文中,您可以执行以下操作

    Delayed::Job.enqueue PollTwitter.new(), 0, 1.minutes.from_now.getutc
    

    这会在 DelayedJob 中设置 run_at 标志。显然,这就是作业将运行的时间。

    【讨论】:

      【解决方案2】:

      this blog post 中,您可以找到一个模块来在DelayedJob 上添加一些调度。

      module Jobs
        module ScheduledJob
          def self.included(base)
            base.extend(ClassMethods)
          end
      
          def perform_with_schedule
            Delayed::Job.enqueue self, 0, self.class.schedule.from_now.getutc
            perform_without_schedule
          end
      
          module ClassMethods
            def method_added(name)
              if name.to_s == "perform" && !@redefined
                @redefined = true
                alias_method_chain :perform, :schedule
              end
            end
      
            def schedule
              @schedule
            end
      
            def run_every(time)
              @schedule = time
            end  
          end
      
        end
      end
      

      我在我的一个项目中使用它,工作正常!

      【讨论】:

        【解决方案3】:

        最近,您可以使用调度 gem,clockwork。 Heroku 官方支持这一点,你可以找到他们的文档here

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-11-27
          • 2022-12-18
          • 2020-12-16
          • 1970-01-01
          • 1970-01-01
          • 2018-06-05
          • 2020-03-22
          • 1970-01-01
          相关资源
          最近更新 更多