2014-11-02 63 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