从Rails中的config / initializers需要lib目录时加载错误

时间:2013-12-30 13:15:26

标签: ruby-on-rails

假设我有Lib结构,其中包含目录secret_code

    ├── lib
    │   ├── assets
    │   ├── files_excercises.rb
    │   ├── secret_code
    │   │   └── secret_1.rb
    │   └── tasks

我想确保此lib/secret_code始终在应用中加载,因此使用这样的初始值设定项:

# config/initializers/secret_code.rb 
require "#{Rails.root}/lib/secret_code"

我得到了这个error

/Users/user/.rvm/gems/ruby-2.0.0-p353/gems/activesupport-3.2.16/lib/active_support/dependencies.rb:251:in `require': cannot load such file -- /Users/user/project_name/lib/secret_code (LoadError)

出了什么问题?

注意:我知道,这可以通过不同的方式完成,试图理解为什么这种方法不起作用。

修改

即使将其添加到application.rb

 config.autoload_paths  = %W(#{config.root}/lib/secret_code)

Ruby只有$load_path

#irb session: 
2.0.0-p353 :003 > puts $LOAD_PATH
/Users/user/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/site_ruby/2.0.0
/Users/user/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/site_ruby/2.0.0/x86_64-darwin12.5.0
/Users/user/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/site_ruby
/Users/user/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/vendor_ruby/2.0.0
/Users/user/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/vendor_ruby/2.0.0/x86_64-darwin12.5.0
/Users/user/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/vendor_ruby
/Users/user/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0
/Users/user/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/x86_64-darwin12.5.0

2 个答案:

答案 0 :(得分:0)

试试这个

config.autoload_paths  = %W(#{config.root}/lib/secret_code)

答案 1 :(得分:0)

您只能要求文件不是目录。

如果您想要secret_code中的所有文件,可以尝试:

Dir["#{Rails.root}/lib/secret_code/*.rb"].each {|file| require file }