【问题标题】:Ways to run cron jobs dynamically on Heroku在 Heroku 上动态运行 cron 作业的方法
【发布时间】:2019-12-20 15:58:53
【问题描述】:

我想在 Heroku 上动态运行 Rails CRON 作业。

时间应存储在数据库中。

所以 CRON 作业应该在 数据库 的时间动态运行。

我想在 Heroku 上运行,所以 无论何时 gem 都不适合我。

有没有办法在 Heroku 上动态运行 CRON 作业?

【问题讨论】:

  • 我认为您正在寻找“heroku 调度程序”
  • @Vishal 无法使用 Heroku 调度程序通过代码动态运行 CRON 作业。

标签: ruby-on-rails cron


【解决方案1】:

我已经在 Heroku 上完成了动态作业调度,这是我所做的:

  1. 我安排了一个每小时运行一次的 Job(Job-A)。
  2. Job-A 将获取安排在下一小时内的所有 survey_launch。
  3. survey_launch时间由用户动态设置,我使用DateTime格式。
  4. 因此,job-A 每小时都会获取下一小时的启动并安排一个 cronjob。
  5. 此过程将每小时执行一次,因此如果任何用户更新任何调查启动时间,则此动态调度程序将相应地工作。

注意:在安排作业时,我还需要考虑时区。

希望您也可以像这样为您的应用动态安排作业。

【讨论】:

    【解决方案2】:

    我已经使用 sidekiq 和 sidekiq-cron gems 动态运行 cron 作业。 首先,我添加了工人。

    class HardWorker
      include Sidekiq::Worker
      def perform(name, count)
        # do something
      end
    end
    

    其次,我添加了 Schedule worker,它会在数据库中的时间更改时更新 cron 作业时间。

    hour = Schedule.last.hour # get **hour** from database
    min = Schedule.last.min  # get **min** from database
    schedules = [
      {
         'name': 'Hard Worker'
         'class': 'HardWorker'
         'cron': "#{min} #{hour} * * *"
      }
    ]
    
    Sidekiq::Cron::Job.load_from_array schedules
    

    【讨论】:

      【解决方案3】:

      您可以使用arask。它无需特殊设置即可在 Heroku 上运行。

      安装 gem 并初始化 db 并在 initializers/arask.rb 中定义您的 cron 任务:

      arask.create task: 'send:logs', cron: '0 2 * * *' # At 02:00 every day
      arask.create task: 'my:awesome_task', interval: :hourly
      arask.create script: 'Attachment.process_new', interval: 5.hours
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-27
        • 1970-01-01
        • 2011-11-17
        • 2016-08-21
        • 2014-12-17
        • 1970-01-01
        • 2015-09-20
        • 2014-04-20
        相关资源
        最近更新 更多