如何配置ActiveJob以使用Resque?

时间:2014-09-12 10:05:22

标签: ruby-on-rails ruby-on-rails-4 resque rails-activejob

我在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

我缺少什么?为什么队列适配器不起作用?有谁知道如何解决这一问题?

2 个答案:

答案 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。