我无法从resque worker中包含的模块调用方法。在下面的示例中,当我尝试在worker(在TestLib模块中)中调用say
方法时,我一直得到未定义的方法错误。我已将代码简化为基础知识以说明问题:
控制器 (/app/controllers/test_controller.rb)
class TestController < ApplicationController
def testque
Resque.enqueue( TestWorker, "HI" )
end
end
库 (/lib/test_lib.rb)
module TestLib
def say( word )
puts word
end
end
工人 (/workers/test_worker.rb)
require 'test_lib'
class TestWorker
include TestLib
@queue = :test_queue
def self.perform( word )
say( word ) #returns: undefined method 'say' for TestWorker:Class
TestLib::say( word ) #returns: undefined method 'say' for TestLib::Module
end
end
Rake文件 (resque.rake)
require "resque/tasks"
task "resque:setup" => :environment
我正在使用以下命令运行resque:rake environment resque:work QUEUE='*'
宝石: 铁轨(3.0.4) redis(2.2.2) redis-namespace(1.0.3) resque(1.19.0)
服务器: nginx的/ 1.0.6
任何人都对那里发生的事情有任何想法?
答案 0 :(得分:27)
当您包含模块时,其方法将成为实例方法。当你扩展时,它们就变成了类方法。您只需将include TestLib
更改为extend TestLib
即可。