2013-06-24 34 views
2

我正在開發一個gem /引擎。我這樣做的方式是通過將其捆綁在來自源代碼的測試RailsApp中:文件更改後My :: Engine中未初始化的常量

# Gemfile 
gem 'my-engine', path: '../local/path/to/gem' 

此工作正常。

但是,在我更改我的寶石中的文件(例如添加空格或中斷)後,引擎被卸載。引起以下錯誤:

uninitialized constant My::Engine 

此錯誤是由不以My::Engine第一次調用的文件拋出。 (我需要調用它來獲取根目錄:My::Engine.root)如果我刪除該行,則不會拋出任何錯誤,但僅顯示一個空白頁面,這是因爲我的所有SQL更改並且沒有內容從數據庫加載。我想,這是因爲在lib目錄中的文件被卸載,因爲這些文件我動態創建活動的記錄模式..

我已經簽出了autoload_pathswatchable_dirs

# engine.rb 
module My 

    class Engine < Rails::Engine 

    engine_name 'my-engine' 

    initializer "my-engine.load_config" do |app| 
     app.config.autoload_paths += %W(#{Engine.root}/lib) 
     app.config.watchable_dirs["#{Engine.root}/lib"] = [:rb] 
    end 

    end 

end 

我不知道我是否以正確的方式實施這些方案,但他們似乎無法像我使用它們一樣解決我的問題。

+0

我很想看到你得到的答案。我在開發引擎時遇到同樣的問題。我的'解決方案'是在我的main_app(主導軌應用程序,而不是引擎)的'application.rb'中執行'require'my''。這對我有用,但似乎不應該是必要的。 –

+0

感謝您的提示,我現在會嘗試..但是,確實有更好的方法.. –

回答

0

我想你可能需要在調用My :: Engine.root之前需要'my/engine',或者改變你的require的順序,以便在打電話的文件之前需要'my/engine'我::引擎。