【问题标题】:NotImplementedError (Use a queueing backend...) using delayed_jobNotImplementedError (使用队列后端...) 使用delayed_job
【发布时间】:2016-09-13 19:08:13
【问题描述】:

在我的 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 工作。在捆绑器中安装吸盘时,并使用:

config.active_job.queue_adapter = :sucker_punch

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

【问题讨论】:

  • 您能否详细说明您是如何安装delayed_job 的?
  • 当然。首先,我安装了 gem:gem 'delayed_job_active_record'bundle install 然后,运行:rails generate delayed_job:active_recordrake db:migratebin/delayed_job startrails server
  • application.rb 中的config.active_job.queue_adapter = :delayed_job 怎么样,你也提到了环境文件。你在初始化器中放了什么?请更新您的答案,以便其他读者了解所有信息。
  • 是的,我把那行放在 config/application.rb、config/environments/production.rb(我正在使用的环境)和 config/environments/development.rb(如果我是使用错误的环境)。我马上更新
  • application.rb 就足够了,如果每个环境都存在,则不需要。让我们在设置 sucker_punch 之前修复 delay_job。

标签: ruby-on-rails queue delayed-job


【解决方案1】:

如果您按照here 列出的所有步骤进行操作,我感觉您没有开始延迟_job 运行

bin/delayed_job start

请同时检查你的运行情况

rails generate delayed_job:active_record
rake db:migrate

【讨论】:

  • 好的,看看你是否完成了我发布的链接中的所有步骤
  • 这确实是我遵循的 5-6 指南之一
【解决方案2】:

试试这个:

在控制器中:

@user.delay.welcome_email

在你的模型中

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

end

【讨论】:

  • 我在尝试这个时遇到了同样的错误。一定有某种配置问题,但我不知道我错过了什么。
  • 试一试不需要额外的配置你只需要安装gem 'delayed_job_active_record'gem "daemons"
  • 我在本地测试它工作正常只需安装 daemons 我想你错过了
【解决方案3】:

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

感谢大家的帮助!

【讨论】:

    【解决方案4】:

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

    # config/environments/development.rb
    
    Rails.application.config.active_job.queue_adapter = :async
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-17
      • 2016-03-11
      • 1970-01-01
      • 1970-01-01
      • 2013-05-21
      • 2011-04-13
      • 2020-04-08
      • 2017-11-03
      相关资源
      最近更新 更多