NotImplementedError 使用排队后端来对将来的作业进行排队

tvi*_*ira 6 ruby-on-rails rails-activejob

我正在尝试使用ActiveJob诸如电子邮件调度之类的队列作业,但我得到了一个

NotImplementedError (Use a queueing backend to enqueue jobs in the future.错误

将更新提交到数据库后,在我的model.rb文件中

class Article < ActiveRecord::Base
  include ActiveModel::Dirty
  require './app/jobs/email_scheduler_job'

  def send_approved_mail
    if self.approved_was == false && self.approved
      ArticleMailer.article_approved(self.owner).deliver_later
      EmailSchedulerJob.set(wait: 2.weeks).perform_later(owner)
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

并在我的EmailSchedulerJob

class EmailSchedulerJob < ActiveJob::Base
  queue_as :default

  def perform(*args)
    # Do something later
  end
end
Run Code Online (Sandbox Code Playgroud)

Van*_*Huy 5

将来您需要使用队列适配器来对作业进行排队。Sidekiq在大多数情况下都很棒,但设置起来相当复杂。我认为使用 sidekiq 来安排电子邮件似乎有点矫枉过正。我建议为此使用sucker_punch 。

要使用ucker_punch作为ActiveJob的适配器,请将其添加到您的Gemfile中:

gem 'sucker_punch'
Run Code Online (Sandbox Code Playgroud)

然后配置后端使用sucker_punch:

# config/initializers/sucker_punch.rb
Rails.application.configure do
  config.active_job.queue_adapter = :sucker_punch
end
Run Code Online (Sandbox Code Playgroud)

您不需要创建发送电子邮件的作业。ActionMailer 与 ActiveJob 集成,因此 Deliver_later 应该足够了。

希望能帮助到你 :)