每当gem触发Rails的ActiveJob vs rake任务以运行定期调度的任务|滑轨5

问题描述 投票:0回答:1

我正在一个Rails 5.2项目上工作,该项目需要计划的异步任务才能每晚运行。我一直在研究使用whenever gem触发ActiveJob job与使用任何时候触发旧式rake任务(/lib/tasks/some_task.rake)之间的区别-我正在努力寻找很多值得注意的方法优点和/或缺点。以下面的两个基本示例实现为例,两种策略之间有什么区别?

我可以看到的差异是,通过ActiveJob,您可以在要运行的作业中获得selecting a queue的更多灵活性,而在执行rake任务时,triggering callbacks around the job则限于单线程,并且没有回调可用。

还有其他值得一看的区别吗?

ActiveJob

app/jobs/subscription_reminder_job.rb

class SubscriptionReminderJob < ApplicationJob
  queue_as :default

  def perform
    Subscription.overdue.find_each do |overdue_subscription|
      UserMailer.subscription_reminder(overdue_subscription.user, overdue_subscription).deliver_later

      overdue_subscription.touch(:last_subscription_reminder_sent_at)
    end
  end
end

config/schedule.rb

every :day, at: '12:00am' do
  runner "SubscriptionReminderJob.perform"
end

角色任务

lib/tasks/send_subscription_reminders.rake

task send_subscription_reminders: :environment do
  Subscription.overdue.find_each do |overdue_subscription|
    UserMailer.subscription_reminder(overdue_subscription.user, overdue_subscription).deliver_later

    overdue_subscription.touch(:last_subscription_reminder_sent_at)
  end
end

config/schedule.rb

every :day, at: '12:00am' do
  rake "send_subscription_reminders"
end
ruby-on-rails rake rake-task whenever rails-activejob
1个回答
0
投票

峰值负载会是什么样?

平均负载如何?

它需要多可靠?

这样的信息在判断下降的路线时必不可少。

根据到目前为止提供的信息进行回答

您想在系统可能处于低使用率期间每天发送X封电子邮件。根据您到目前为止提供的内容,这看起来确实是一个简单的用例。

您建议的两种方法之间没有太大区别。 Rails的全部内容是[[配置时的常规约定。除非您有很好的理由不这样做,否则应使用ActiveJob框架。它用作作业基础结构的API,使您可以在需求发生变化时轻松地交换排队的后端实现。

您没有建议任何表明违反常规的要求在这里有用。保持简单并利用使Rails如此出色的优势,惯例是为您完成了很多工作。

Intro to ActiveJob

您应该使用哪个队列后端?从sidekiq开始简单,然后从那里开始。迭代构建。如果您到达了sidekiq限制您的阶段,ActiveJob便可以轻松地将其切换为另一个队列工具。好时光!

© www.soinside.com 2019 - 2024. All rights reserved.