2014-11-02 51 views
2

我想弄清楚自動加載的事情,但我很難讓它在沒有明確要求文件的情況下工作。Rails 4:自動從lib下載

我需要做一些特殊的配置,以便Rails 4能夠自動加載lib目錄中的文件嗎?

如果我去rails console並輸入$LOAD_PATH我可以看到/home/some_user/workspace/rails/myapp/lib被包含到加載路徑中。這應該意味着Rails將能夠自動加載正確的文件?

所以我的理解:
如果我把裏面lib/目錄我的文件,我將使用的命名約定,Rails的應該能夠自動要求正確的文件,如果在我的代碼的任何地方,我會做這樣的事情:

cats = Cats::SomeCat.new(假定lib/cats/some_cat.rb存在)

some_cat.rb包含:

module Cats 
    class SomeCat 
     def initialize 
      @name = "Some cat" 
     end 
    end 
end 

但是,Rails會顯示錯誤uninitialized constant CatController::Cats

如果我添加一行require 'cats/some_cat'一切都會奏效。然而,在'The Rails 4 Way'中,我讀到:
The bottom line is that you should rarely need to explicitly load Ruby code in your Rails application (using require) if you follow the naming conventions

我使用了錯誤的命名約定還是我強迫使用那
config.autoload_paths += %W(#{config.root}/lib)的事?

+0

你重新啓動應用程序?它在初始化應用程序時僅被初始化一次。 – nebula 2014-11-02 16:14:27

+5

[自動加載lib文件在Rails 4中]的可能的副本(http://stackoverflow.com/questions/19098663/auto-loading-lib-files-in-rails-4) – MZaragoza 2014-11-02 16:38:31

+0

作爲一個附註:Subdirectores的' app /'(以及其中的類/模塊)將被加載,這就是我通常所做的 - 創建一個子目錄,例如'應用程序/ workers'。 – lllllll 2015-10-26 17:58:38

回答

3

添加config.autoload_paths += %W(#{config.root}/lib)這個代碼

的config/application.rb中

+0

錯過了一個結局) – nathanengineer 2016-05-13 19:05:09

+0

這似乎更好一點:http://stackoverflow.com/a/19650564/520567 – akostadinov 2016-11-15 20:42:19

0

你是說,你需要在你的config/application.rb目錄中的配置正確。

正如Sobin所說,最好的方法是在該文件中包含config.autoload_paths...

你可以找到更多有關此內容的軌道引導

http://edgeguides.rubyonrails.org/configuring.html