NotImplementedError(使用排队后端...)使用 delayed_job

NotImplementedError (Use a queueing backend...) using delayed_job

在我的 Rails 应用程序 (4.2.4) 中,我一直在尝试让异步邮件发送正常工作。

我安装了 delayed_job 作为我的队列适配器,并在几个地方将其设置为适配器:config/application.rb、config/environments/{development,production}.rb 和config/initializers/active_job.rb.

安装:

我将其添加到我的 Gemfile 中:

gem 'delayed_job_active_record'

然后,我运行执行以下命令:

$ bundle install
$ rails generate delayed_job:active_record
$ rake db:migrate
$ bin/delayed_job start

在config/application.rb, config/environments/production.rb, config/environments/development.rb:

config.active_job.queue_adapter = :delayed_job

在config/initializers/active_job.rb中(当上面的不起作用时添加):

ActiveJob::Base.queue_adapter = :delayed_job

我还 运行 delayed_job 的 ActiveRecord 迁移,并在 运行 安装我的服务器之前开始 bin/delayed_job。

话虽这么说,但每次我尝试时:

UserMailer.welcome_email(@user).deliver_later(wait: 1.minutes)

我收到以下错误:

NotImplementedError (Use a queueing backend to enqueue jobs in the
future. Read more at http://guides.rubyonrails.org/active_job_basics.html):
    app/controllers/user_controller.rb:25:in `create'
    config.ru:25:in `call'

我的印象是 delayed_job 是一个排队后端...我是不是漏掉了什么?

编辑:

我也无法让 sucker_punch 工作。在捆绑器中安装 sucker_punch 并使用:

config.active_job.queue_adapter = :sucker_punch

在 config/application.rb 中,我得到了相同的错误和堆栈跟踪。

如果您按照列出的所有步骤进行操作 here,我觉得您没有开始 delayed_job 运行宁

bin/delayed_job start

也请检查你运行

rails generate delayed_job:active_record
rake db:migrate

试试这个:

在控制器中:

@user.delay.welcome_email

在您的模型中

def welcome_email
 UserMailer.welcome_email(self).deliver_later(wait: 1.minutes)

end

弄清楚它是什么:我通常使用单个 shell 脚本启动我的服务器以及与之相关的所有内容。在这个脚本中,我在后台 运行 bin/delayed_job start,并在 bin/delayed_job start 完成之前启动服务器。解决方案是确保 delayed_job start 启动服务器之前 在我的启动脚本中通过 运行 在前台启动服务器。

感谢大家的帮助!

如果您在开发环境中遇到此问题,即使您使用的是支持异步作业(如 Sidekiq)的适配器,请确保将 Rails.application.config.active_job.queue_adapter 设置为 :async 而不是 :inline.

# config/environments/development.rb

Rails.application.config.active_job.queue_adapter = :async