我正在尝试使用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
并在我的EmailSchedulerJob
class EmailSchedulerJob < ActiveJob::Base
queue_as :default
def perform(*args)
# Do something later
end
end
答案 0 :(得分:4)
您需要使用队列适配器将来排队作业。 Sidekiq在大多数情况下都很棒,但设置起来非常复杂。我认为使用sidekiq进行电子邮件调度似乎有点矫枉过正。我建议使用sucker_punch。
要使用sucker_punch作为ActiveJob的适配器,请将其添加到Gemfile中:
gem 'sucker_punch'
然后配置后端使用sucker_punch:
# config/initializers/sucker_punch.rb
Rails.application.configure do
config.active_job.queue_adapter = :sucker_punch
end
您无需创建发送电子邮件的作业。 ActionMailer与ActiveJob集成,因此deliver_later就足够了。
希望有所帮助:)