2011-11-15 21 views
8

मुझे एक रेस्क्यू कार्यकर्ता के अंदर एक मॉड्यूल से कॉलिंग विधियों में समस्याएं आ रही हैं। नीचे दिए गए उदाहरण में, जब मैं कार्यकर्ता के अंदर 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 

कार्यकर्ता (/ कार्यकर्ताओं/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 

मैं resque निम्न आदेश का उपयोग कर चल रहा हूँ: rake environment resque:work QUEUE='*'

रत्न: रेल (3.0.4) रेडिस (2.2.2) रेडिस-नेमस्पेस (1.0.3) रेस्क्यू (1.1 9.0)

सर्वर: nginx/1.0.6

किसी के पास कोई विचार है कि वहां क्या हो रहा है?

उत्तर

27

जब आप एक मॉड्यूल शामिल करते हैं, तो इसकी विधियां उदाहरण विधियां बन जाती हैं। जब आप विस्तार करते हैं, वे कक्षा के तरीके बन जाते हैं। आपको बस include TestLib को extend TestLib में बदलने की आवश्यकता है और इसे काम करना चाहिए।

+0

* हेडलैप * मुझे लगता है कि मैं रेल में बहुत हाल ही में काम कर रहा हूं। वह चाल है। धन्यवाद! – internetoutfitters

+1

+1 @tbuehlmann। –

+0

यदि आप ऐसा करते हैं और यह अभी भी काम नहीं करता है, तो अपने सर्वर को पुनरारंभ करें – Kathan

संबंधित मुद्दे