我无法从resque worker中的包含模块调用方法.在下面的示例中,当我尝试say
在worker(在TestLib模块中)中调用方法时,我一直得到未定义的方法错误.我已将代码简化为基础知识来说明问题:
控制器 (/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
Rakefile (resque.rake)
require "resque/tasks" task "resque:setup" => :environment
我正在使用以下命令运行resque: rake environment resque:work QUEUE='*'
Gems:rails(3.0.4)redis(2.2.2)redis-namespace(1.0.3)resque(1.19.0)
服务器:nginx/1.0.6
任何人都对那里发生了什么有任何想法?
包含模块时,其方法将成为实例方法.当你扩展时,它们就变成了类方法.你只需要改变include TestLib
到extend TestLib
它应该工作.