我剛剛遇到了這個。有(至少?)2可能出現的問題:
查找範圍config/application.rb
這條線:
config.autoload_paths += %W(#{config.root}/extras)
如果它的評論,取消註釋。該行將打開extras
中的所有文件以及extras
的子目錄中的所有文件的自動加載。這可能是最安全的移動你的模塊插入extras
,但如果你真的要離開他們lib
,更改行是:
config.autoload_paths += %W(#{config.root}/extras #{config.root}/lib)
- 你的模塊是自動加載路徑,但不能命名方式Rails的預計
(看到這一點:Rails 2.3.5: How does one access code inside of lib/directory/file.rb?)
按照慣例,Rails的希望你的模塊的名稱的目錄^ h匹配層次結構和文件名。因此,該文件extras/mylib.rb
預計將包含
module Mylib # not MyLib or My_lib
...
end
這適用於子目錄爲好,這樣一個文件extras/mydir/mylib.rb
應包含:
module Mydir
module Mylib # or class Mylib
...
end
end
這個命名約定一致,那麼Rails的預計,控制器和楷模。文件名中的下劃線變成camelcase類/模塊名稱。一個名爲my_lib.rb
的文件預計會有一個module MyLib
(但不包括Mylib
)。
注意是自動加載並不意味着模塊在啓動時自動加載;相反,它在第一次使用時會自動加載。因此,即使您在mylib.rb
文件的頂部有puts "hi from mylib"
之類的代碼,在代碼使用Mylib
之前,您也不會看到該打印。
最後,如果你真的想你的模塊在啓動時加載,去創建一個名爲config/initializers/force_load_libraries.rb
文件,並把這個在那裏:
Dir.glob("#{Rails.root}/extras/force_load/*.rb").each { |f| require f }
現在去把你的庫中extras/force_load
,他們應該在負載Rails啓動。
+1。我想知道更多關於如何在Rails 3.1中測試自定義模塊 – brutuscat
我做了rake環境測試:單元,但它仍然無法工作。我認爲這應該是加載環境,但它仍然沒有工作 – serengeti12
我做了什麼(使用RSpec2而不是Test:Unit),讓我的模塊抓取到extras /文件夾中,如下所示:extras/crawl/module.rb是在我的spec文件夾中添加重複的這些路徑,如spec/extras/crawl/module_spec.rb。然後我還創建了一個初始化程序,它需要像「crawl/string」這樣的自定義設置。認爲我的自定義類是自動加載在我的application.rb config.autoload_paths + =%W(#{config.root}/extras) – brutuscat