【发布时间】: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_record,rake db:migrate,bin/delayed_job start,rails 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