2010-09-30 68 views
1

因此,我已經習慣了在我的Rails 2項目(稱爲Bootstrapper)中使用這個偉大的插件。它基本上重複了seeds.rb文件的功能,但我喜歡它,因爲它可以讓您將引導進程分解爲簡潔的塊。將Rails 2插件轉換爲Rails 3寶石

無論如何,我已經走到了這個項目並試圖將它變成一個Rails 3寶石。我已經能夠獲得gem來初始化並註冊rake任務和生成器。但是,我遇到了Bootstrapper類本身的問題。它不會加載到Rails項目中,除非它在一個模塊中。

也就是說,如果我將Bootstrapper類自己放在一個文件中並且需要Railtie中的文件,那麼在我的Rails應用程序中,它找不到Bootstrapper類。如果我把這個類放在一個模塊中並且調用Bootstrapper :: Bootstrapper,那麼一切都很好用。

實際需要引導程序類的代碼是這樣的:

ActiveSupport.on_load :active_record do 
    require 'bootstrapper/bootstrapper' 
end 

源可以在這裏找到: http://github.com/jrmehle/bootstrapper/tree/make_gem

回答

0

自動加載路徑實際上有下列文件系統路徑的一個惱人的功能。例如,在你的lib或演員(取決於你自動加載的),你可能有以下文件結構:

lib/bootstrapper/bootstrapper.rb 
# in this case, Bootstrapper::Bootstrapper.class = Class in rails c 
# ie: you don't get a NameError exception 

更具體地說,

lib/bootstrappers/bootstrapper.rb 
# Bootstrapper::Bootstrapper => NameError 
# Bootstrappers::Bootstrapper => works 

如果你真的想其他的辦法,你可以移動一切進入你的lib/bootstrapper.rb源文件,但是,我不喜歡這樣做,那不是如何組織的。在rails3中,一旦你使用模塊(這可能很痛苦),你會發現自動加載非常好。

Rails3使用/ extras而不是/ lib,但它不是必需的,它只是rails new的默認值(註釋掉)。要切換,你只需自動裝載extras而不是lib。