假设我有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
答案 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 }