【问题标题】:NotImplementedError Use a queueing backend to enqueue jobs in the futureNotImplementedError 使用队列后端来排队将来的作业
【发布时间】:2015-12-26 21:47:02
【问题描述】:

我正在尝试使用 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

【问题讨论】:

  • 你使用的是哪个 ActiveJob 的适配器?
  • 这可能是问题所在,我认为我没有使用任何适配器

标签: ruby-on-rails rails-activejob


【解决方案1】:

以后您需要使用队列适配器将作业排入队列。 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 就足够了。

希望对你有帮助:)

【讨论】:

    猜你喜欢
    • 2016-09-13
    • 2012-08-22
    • 2021-09-16
    • 1970-01-01
    • 2015-03-16
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多