ruby-on-rails - NotImplementedError 将来使用排队后端来排队作业

标签 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

在我的 EmailSchedulerJob
class EmailSchedulerJob < ActiveJob::Base
  queue_as :default

  def perform(*args)
    # Do something later
  end
end

最佳答案

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

希望能帮助到你 :)

关于ruby-on-rails - NotImplementedError 将来使用排队后端来排队作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34475509/

相关文章:

ruby-on-rails - 如何从 url 中删除随机多余的斜杠?

javascript - MiniMagick::错误失败:

ruby-on-rails - Rails - 设计 - 处理 - devise_error_messages

ruby-on-rails - Rails 3 - yield return 或 callback 不会在 View 中调用 <%= yield( :sidebar) || render ('shared/sidebar' ) %>

ruby-on-rails - ActiveJob::Base 中的 DRY

ruby-on-rails - 无法将 CollectionProxy 对象传递给 ActiveJob

.net - 我可以将 Ruby on Rails Web 应用程序部署到 IIS Web 服务器吗?

ruby-on-rails - 使用 delay_job 的 ActiveJob 不会在测试中创建 delay_jobs 行

ruby-on-rails - 创建周期性事件作业失败

ruby-on-rails - 如何防止并行 Sidekiq 作业在 Rails 中执行代码