【问题标题】:Rails 5 Regular Tasks Without CronRails 5 没有 Cron 的常规任务
【发布时间】:2017-06-19 17:34:11
【问题描述】:

我是 Rails 新手,所以我不确定这是不是一个愚蠢的问题,但是......

我必须运行常规任务来将数据填充到我的 Rails 应用程序中。今天我使用when gem 来创建Cron 条目以在我的系统上运行这些任务。我想将我的 Rails 应用程序迁移到 Docker,以便更轻松地扩展它。我知道在 Drupal(PHP) 中有Poorman's Cron,它使用请求来驱动时间表。

有没有一种方法可以在 Rails 中实现调度而不使用 Cron,或者有更好的方法来管理与 Rails 配合使用的常规任务?

【问题讨论】:

  • 你可以使用sidekiq+sidetiq。
  • Sidetiq 似乎不再维护
  • 啊是的。好吧,那没关系。
  • Sidekiq 和 Resque 似乎是集群上的一个不错的选择,尽管需要一些工作才能启动和运行。
  • 从头开始...看起来 resque 和 resque-scheduler 是我需要的

标签: ruby-on-rails docker cron


【解决方案1】:

有没有办法在 Rails 中实现调度而不使用 Cron 还是一种更好的方法来管理与 Rails 配合得很好的常规任务?

Cron 几乎是在 *nix 系统上运行计划活动的首选工具,大多数 gem 实际上在后台利用 cron,事实上,除非您想使用第三方服务,否则避免 cron 可能需要做更多的工作。

Rails 5 的新特性之一是ActiveJob

Active Job 是一个用于声明作业并使它们在 各种排队后端。这些工作可以是一切从 定期清理,计费,邮寄。 任何可以分割成小的工作单元并运行的东西 平行,真的。

它可以与多个后端一起使用:

【讨论】:

  • 我没有看到任何使用 ActiveJob 将作业推迟到特定日期/时间的方法。你能用参考更新你的答案吗?
  • GuestsCleanupJob.set(wait_until: Date.tomorrow.noon).perform_later(guest) - 阅读指南非常直接。 guides.rubyonrails.org/active_job_basics.html#enqueue-the-job
  • 我刚刚使用 orats 生成了一个完整的 Rails 环境,并添加了一个工作集以一次启动......它成功了!太棒了!
  • 我最终使用 sidekiq-cron 执行重复性任务。
【解决方案2】:

是的,我创建了https://github.com/Ebbe/arask 以保持简单。

无需安装任何东西(除了 gem)或在 rails 之外设置任何东西。没有后台进程,除了实际作业。

gem 'arask' 添加到您的Gemfile,运行bundle installrails generate arask:installrails db:migrate

现在您可以在文件 config/initializers/arask.rb 中设置您的任务:

arask.create script: 'puts "IM ALIVE!"', interval: :daily
arask.create task: 'my:awesome_task', interval: :hourly
arask.create task: 'my:other_awesome_task', interval: 2.hours

如果服务器正在运行,任务将自动运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-05
    • 2011-12-03
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 2023-04-07
    • 2018-12-15
    相关资源
    最近更新 更多