2011-07-14 40 views
0

模塊插件這是一個明確的福利局問題:包括Rails中

我在我的lib/目錄中,我從一個清掃和rake任務調用所定義的模塊。在模塊內部,我想引用我的spawn插件。只包括來自該插件的方法不起作用(未定義的方法錯誤),也沒有任何要求或包括我試過的版本。我需要做什麼來包含它?

謝謝!

編輯:

這裏是我的最新努力:

require 'vendor/plugins/spawn/init.rb' 

module MyModule 

    include Spawn 

    def self.my_method 

    spawn(:method => :thread, :nice => 9) do # also tried Spawn::spawn 

     ... 

    end 
    end 
end 

我得到的錯誤是:

undefined method 'spawn' for MyModule:Module #spawnundefined method 'spawn' for Spawn:Module # Spawn::spawn

回答

0

的包括必須從內完成該插件。當「重新打開」一個模塊(位於lib/dir中)時,請記住在更改模塊之前需要原始文件(模塊)。

編輯: 考慮到插件是第三方,你可以嘗試:

Spawn.module_eval do 
    module_function :spawn 
    public :spawn 
end 

module MyModule 
    def self.my_method 
    Spawn.spawn(...) 
    end 
end 
+0

謝謝,mosch。但我不太明白。 Spawn是我用來爲我的模塊中的方法提供功能的第三方插件。如果我不需要,我不想向插件添加任何內容。當然,有一種方法可以從模塊中調用Spawn的方法,而無需在插件中明確包含模塊?嘗試了'Spawn :: spawn()'在頂部有和沒有'include Spawn'等。雖然'spawn()'直接在清理器中工作正常,但沒有任何工作。 – glortho

+0

對不起,不知道產卵是第三方。但是如果你看看他們的init.rb https://github.com/tra/spawn/blob/master/init.rb,你可以看到他們正在使用ActiveRecord :: Base來處理你自己的模塊。嘗試在模塊文件的頂部請求vendor/plugins/spawn/init.rb,然後在模塊的第一行添加「include Spawn」。 – moritz

+0

不幸的是,仍然沒有骰子。查看我的編輯。任何其他想法?我必須錯過簡單的東西。 (我應該說我也嘗試過'Spawn.send:include,MyModule',沒有運氣。 – glortho