我在Rails 4.2和Resque中使用ActiveJob时遇到了一些困难。
我已经安装了redis,并且已经将resque和resque-scheduler添加到我的Gemfile中。
我创建了一个测试作业 - 它只是生成的文件
rails g job test
但我一直收到有关未定义ActiveJob的错误
NameError: uninitialized constant ActiveJob
当我像这样切换适配器时或缺少方法
config.active_job.queue_adapter = :resque
我收到此错误
/usr/local/lib/ruby/gems/2.1.0/gems/railties-4.2.0.beta1/lib/rails/railtie/configuration.rb:95:in `method_missing': undefined method `active_job' for #<Rails::Application::Configuration:0x007f97ba98a5b8> (NoMethodError)
我甚至看过源代码,但我不知道。它只是在呼唤超级。
https://github.com/rails/rails/blob/master/railties/lib/rails/railtie/configuration.rb#L95
我缺少什么?为什么队列适配器不起作用?有谁知道如何解决这一问题?
答案 0 :(得分:5)
我发现我选择了我正在使用的框架。
# config/application.rb
require "active_model/railtie"
require "active_record/railtie"
require "action_controller/railtie"
require "action_mailer/railtie"
require "action_view/railtie"
require "sprockets/railtie"
修复它的方法是在application.rb文件中添加Active Job框架。
require "active_job/railtie"
或加载所有Rails
require 'rails/all'
这似乎现在正在发挥作用。
答案 1 :(得分:1)
使用gem'resque'和gem'resque-scheduler'以及bundle install添加Gemfile。我们还需要创建一个Resque配置文件:
#config/initializers/resque.rb
Resque.redis = Redis.new(:host => "localhost", :port => 6379)
我们还需要Resque和Resque Scheduler rake任务,因此我们可以使用rake启动我们的worker和scheduler: #LIB /任务/ resque.rake
require 'resque/tasks'
require 'resque/scheduler/tasks'
namespace :resque do
task :setup do
require 'resque'
require 'resque-scheduler'
end
end
我们现在可以使用QUEUE=* rake environment resque:work
启动工作人员。如果一切正常,我们应该能够在Resque控制台中看到它。运行resque-web
并访问http://0.0.0.0:5678/overview。
我们真正需要做的就是将其配置为使用Resque适配器。
#config/initializers/active_job.rb
ActiveJob::Base.queue_adapter = :resque
现在添加作业并取消它们应该按预期工作。
如果看到undefined ActiveJob
,还可以尝试更新rails gem。