2011-11-15 27 views
8

Tôi đang gặp sự cố khi gọi các phương thức từ mô-đun đi kèm bên trong công nhân phục hồi. Trong ví dụ dưới đây, tôi tiếp tục nhận được các lỗi phương thức không xác định khi tôi cố gắng gọi phương thức say bên trong công nhân (trong mô-đun TestLib). Tôi đã giảm xuống mã vấn đề cơ bản để trần để minh họa cho vấn đề này:Rails Gỡ lỗi lỗi phương thức không xác định trong mô-đun bên ngoài

khiển (/app/controllers/test_controller.rb)

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

Thư viện (/ lib/test_lib. rb)

module TestLib 
    def say(word) 
    puts word 
    end 
end 

Worker (/ công nhân/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 

Tôi đang chạy resque sử dụng lệnh sau: rake environment resque:work QUEUE='*'

Gems: ray (3.0.4) redis (2.2.2) không gian tên đỏ (1.0.3) resque (1.19.0)

Máy chủ: nginx/1.0.6

Bất kỳ ai có ý tưởng gì về những gì đang xảy ra ở đó?

Trả lời

27

Khi bạn bao gồm một mô-đun, các phương thức của nó sẽ trở thành các phương thức thể hiện. Khi bạn mở rộng, chúng trở thành các phương thức lớp. Bạn chỉ cần thay đổi include TestLib thành extend TestLib và nó sẽ hoạt động.

+0

* headlap * Tôi nghĩ rằng tôi đã làm việc trong đường ray quá nhiều thời gian gần đây. Điều đó đã làm các trick. Cảm ơn! – internetoutfitters

+1

+1 @tbuehlmann. –

+0

Nếu bạn làm điều này và nó vẫn không hoạt động, hãy khởi động lại máy chủ của bạn – Kathan

Các vấn đề liên quan