2

我在 Rails 4.2 和 Resque 中使用 ActiveJob 时遇到了一些困难。

我已经安装了 redis,并且在我的 Gemfile 中添加了 resque 和 resque-scheduler。

我创建了一个测试作业 - 它只是生成的文件

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

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

4

2 回答 2

6

我发现我已经选择了我正在使用的框架。

# 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'

这似乎现在起作用了。

于 2014-09-12T10:36:56.560 回答
1

使用 gem 'resque' 和 gem 'resque-scheduler' 将它们添加到 Gemfile 并捆绑安装。我们还需要创建一个 Resque 配置文件:

#config/initializers/resque.rb

Resque.redis = Redis.new(:host => "localhost", :port => 6379)

我们还需要 Resque 和 Resque Scheduler rake 任务,因此我们可以使用 rake 启动我们的工作程序和调度程序:#lib/tasks/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

现在添加 Jobs 并加入它们应该可以按预期工作。如果您看到,也尝试更新 rails gem undefined ActiveJob

于 2015-06-14T10:34:21.370 回答