我正在使用 Rails 3.2.2 并希望以递归方式加载某个目录中的所有代码。例如:
[Rails root]/lib/my_lib/my_lib.rb
[Rails root]/lib/my_lib/subdir/support_file_00.rb
[Rails root]/lib/my_lib/subdir/support_file_01.rb
...
基于谷歌搜索,我试过:
config.autoload_paths += ["#{Rails.root.to_s}/lib/my_lib/**"]
config.autoload_paths += ["#{Rails.root.to_s}/lib/my_lib/**/"]
config.autoload_paths += ["#{Rails.root.to_s}/lib/my_lib/**/*"]
config.autoload_paths += ["#{Rails.root.to_s}/lib/my_lib/{**}"]
config.autoload_paths += ["#{Rails.root.to_s}/lib/my_lib/{**}/"]
这些都没有加载任何代码,我得到“未初始化的常量”错误。
这将文件直接加载到 中/my_lib/
,但不加载子目录:
config.autoload_paths += ["#{Rails.root.to_s}/lib/my_lib"]
更新
感谢您的评论。
我把这个放在我的application.rb
:
Dir["#{Rails.root.to_s}/lib/**/*.rb"].each { |file| config.autoload_paths += [file] }
应用程序启动,但在我的库中声明的类不可用:
> MyClass
NameError: uninitialized constant MyClass