由于最新的Rails 3版本不再从lib中自动加载模块和类, 最好的装货方式是什么?
从github:
在这次提交中做了一些更改: 不自动加载代码在*lib*的应用程序(现在你需要显式 要求他们)。这使得应用程序的行为更接近于引擎 (lib中的代码仍然是自动加载插件);
由于最新的Rails 3版本不再从lib中自动加载模块和类, 最好的装货方式是什么?
从github:
在这次提交中做了一些更改: 不自动加载代码在*lib*的应用程序(现在你需要显式 要求他们)。这使得应用程序的行为更接近于引擎 (lib中的代码仍然是自动加载插件);
当前回答
在我的情况下,我只是试图直接在lib目录下加载一个文件。
在application.rb……
require '/lib/this_file.rb'
即使是在主机上,当我尝试时,它也不起作用
require './lib/this_file.rb'
rails可以完美地加载文件。
我还是个新手,我不知道为什么这样做,但它确实有效。如果有人愿意给我解释一下,我会很感激:D我希望这能帮助到别人。
其他回答
从Rails 2.3.9开始,在config/application中有一个设置。Rb,您可以在其中指定包含要自动加载的文件的目录。
从application.rb:
# Custom directories with classes and modules you want to be autoloadable.
# config.autoload_paths += %W(#{config.root}/extras)
在我的情况下,我只是试图直接在lib目录下加载一个文件。
在application.rb……
require '/lib/this_file.rb'
即使是在主机上,当我尝试时,它也不起作用
require './lib/this_file.rb'
rails可以完美地加载文件。
我还是个新手,我不知道为什么这样做,但它确实有效。如果有人愿意给我解释一下,我会很感激:D我希望这能帮助到别人。
正确地拼写文件名。
认真对待。我和一个类斗争了一个小时,因为这个类是Governance::ArchitectureBoard,文件在lib/ Governance /architecture_baord中。rb (board中O和A的转置)
回想起来似乎很明显,但那是魔鬼在追踪。如果这个类没有定义在Rails基于修改类名而期望它所在的文件中,那么它就不会找到它。
# Autoload lib/ folder including all subdirectories
config.autoload_paths += Dir["#{config.root}/lib/**/"]
快速提示:自动加载lib目录包括所有子目录,避免延迟加载
请注意,lib文件夹中包含的文件仅在服务器启动时加载。如果你想轻松地自动重载这些文件,请阅读:Rails 3快速提示:在开发模式下自动重载lib文件夹。请注意,这并不适用于生产环境,因为永久重新加载会降低机器的速度。
如果只有某些文件需要访问lib中的模块,只需向需要它的文件添加require语句。例如,如果一个模型需要访问一个模块,则添加:
require 'mymodule'
在模型的顶部。rb文件。