由于最新的Rails 3版本不再从lib中自动加载模块和类, 最好的装货方式是什么?
从github:
在这次提交中做了一些更改: 不自动加载代码在*lib*的应用程序(现在你需要显式 要求他们)。这使得应用程序的行为更接近于引擎 (lib中的代码仍然是自动加载插件);
由于最新的Rails 3版本不再从lib中自动加载模块和类, 最好的装货方式是什么?
从github:
在这次提交中做了一些更改: 不自动加载代码在*lib*的应用程序(现在你需要显式 要求他们)。这使得应用程序的行为更接近于引擎 (lib中的代码仍然是自动加载插件);
当前回答
从Rails 5开始,建议将lib文件夹放在app目录下,或者为文件夹创建其他有意义的名称空间,如服务、演示器、功能等,并将其放在app目录下,以便由Rails自动加载。
请检查这个GitHub讨论链接。
其他回答
我也有同样的问题。下面是我的解决方法。解决方案加载lib目录和所有子目录(不仅仅是direct目录)。当然,您可以将此用于所有目录。
# application.rb
config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]
警告:如果你想从你的lib文件夹中加载“monkey patch”或“open class”,不要使用“autoload”方法!!
”配置。autoload_paths方法:仅在加载只在一个地方定义的类时有效。如果某个类已经在其他地方定义了,那么您就不能通过这种方法再次加载它。 “配置/初始化/ load_rb_file。Rb”方法:总是有效!无论目标类是一个新类,还是一个“开放类”或现有类的“猴子补丁”,它总是有效的!
详情请见:https://stackoverflow.com/a/6797707/445908
# Autoload lib/ folder including all subdirectories
config.autoload_paths += Dir["#{config.root}/lib/**/"]
快速提示:自动加载lib目录包括所有子目录,避免延迟加载
请注意,lib文件夹中包含的文件仅在服务器启动时加载。如果你想轻松地自动重载这些文件,请阅读:Rails 3快速提示:在开发模式下自动重载lib文件夹。请注意,这并不适用于生产环境,因为永久重新加载会降低机器的速度。
在我的情况下,我只是试图直接在lib目录下加载一个文件。
在application.rb……
require '/lib/this_file.rb'
即使是在主机上,当我尝试时,它也不起作用
require './lib/this_file.rb'
rails可以完美地加载文件。
我还是个新手,我不知道为什么这样做,但它确实有效。如果有人愿意给我解释一下,我会很感激:D我希望这能帮助到别人。
配置。autooad_paths不适合我。我用另一种方法来解
Ruby on rails 3不会自动重载/lib文件夹中的代码。我把它放到ApplicationController里面
Dir["lib/**/*.rb"].each do |path|
require_dependency path
end