2011-11-15 11 views
8

Tengo problemas para llamar a los métodos desde un módulo incluido dentro de un trabajador resque. En el ejemplo siguiente, sigo obteniendo errores de método indefinidos cuando intento llamar al método say dentro del trabajador (que está en el módulo TestLib). He reducido el código a lo básico desnudas para ilustrar el tema:Rails Resque error de método indefinido en el módulo externo

controlador (/app/controllers/test_controller.rb)

class TestController < ApplicationController 
    def testque 
    Resque.enqueue(TestWorker, "HI") 
    end 
end 

Biblioteca (/ lib/test_lib. rb)

module TestLib 
    def say(word) 
    puts word 
    end 
end 

Trabajador (/ trabajadores/test_worke r.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 

estoy corriendo resque con el siguiente comando: rake environment resque:work QUEUE='*'

gemas: carriles (3.0.4) redis (2.2.2) redis-namespace (1.0.3) resque (1.19.0)

Servidor: nginx/1.0.6

Alguien tiene alguna idea de lo que está pasando allí?

Respuesta

27

Cuando incluye un módulo, sus métodos se convierten en métodos de instancia. Cuando se extiende, se convierten en métodos de clase. Solo necesita cambiar include TestLib a extend TestLib y debería funcionar.

+0

* headslap * Creo que he estado trabajando mucho en los raíles últimamente. Eso hizo el truco. ¡Gracias! – internetoutfitters

+1

+1 @tbuehlmann. –

+0

Si hace esto y aún no funciona, reinicie su servidor – Kathan

Cuestiones relacionadas