未实现错误(使用延迟作业队列后端...)使用delayed_job

5
在我的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)

I get the following error:

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工作。当在bundler中安装sucker_punch,并使用:

config.active_job.queue_adapter = :sucker_punch

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

你能详细说明一下你是如何安装delayed_job的吗? - Leonel Galán
当然。首先,我安装了gem:`gem 'delayed_job_active_record'`,`bundle install`然后,运行了以下命令:`rails generate delayed_job:active_record`, `rake db:migrate`, `bin/delayed_job start`, `rails server` - Anish Goyal
只需要翻译 application.rb,如果有每个环境的话就不用了。在设置 sucker_punch 之前,让我们先修复 delayed_job。 - Leonel Galán
最初,我只把它放在那个地方。当我遇到错误时,我把它放在其他所有地方。另外:我更新了问题,现在应该更全面了。 - Anish Goyal
好几次,是的。 - Anish Goyal
显示剩余3条评论
4个回答

3

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

# config/environments/development.rb

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

1
如果您按照这里列出的所有步骤进行操作,我认为您没有启动delayed_job。
bin/delayed_job start

请也检查你的运行。
rails generate delayed_job:active_record
rake db:migrate

好的,请检查一下您是否已经完成了我发布链接中的所有步骤。 - Emiliano Della Casa
那确实是我遵循的5-6个指南之一。 - Anish Goyal

1
尝试这个:

在控制器中:

@user.delay.welcome_email

在您的模型中
def welcome_email
 UserMailer.welcome_email(self).deliver_later(wait: 1.minutes)

end

当我尝试这个时,我得到了相同的错误。肯定是某种配置问题,但我无法弄清楚我缺少什么。 - Anish Goyal
只需尝试一下,无需额外配置,您只需要安装 gem 'delayed_job_active_record'gem "daemons" - Pitabas Prathal
我在本地测试过了,一切正常,只需要安装 daemons,我想你可能忘记了。 - Pitabas Prathal

0
找到问题所在了:我通常使用单个 shell 脚本启动服务器及其相关内容。在此脚本中,我在后台运行 bin/delayed_job start 并在它完成之前启动服务器。解决方案是通过在启动脚本中以前台方式运行 delayed_job start 来确保在启动服务器之前它已经完成。
感谢大家的帮助!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接