我觉得我理解require和require_dependency(来自How are require, require_dependency and constants reloading related in Rails?)之间的区别。
但是,我想知道如果我使用其中的一些方法(请参阅http://hemju.com/2010/09/22/rails-3-quicktip-autoload-lib-directory-including-all-subdirectories/和Best way to load module/class from lib folder in Rails 3?)以便加载所有文件,会发生什么:
似乎开发性能会受到轻微影响,这对我来说并不是什么大不了的事。如何在生产环境中影响性能?如果您还在生产中,那么所有文件通常只会被加载一次吗?有没有更好的方法,我没有看到?
如果您可以包含一些我可以阅读更多相关信息的资源,我们将不胜感激。一些博客帖子说最近这种行为改变了,Rails 3用于自动加载lib / *文件,这是有争议的,但我没有看到任何链接到这些讨论。考虑利弊是有帮助的。谢谢!
答案 0 :(得分:4)
生产中默认禁用代码重新加载器。因此,如果您在文件顶部调用require_dependency,它将只执行一次。
你提到的Rails 3变化真的很小。您通常可以致电Foo
,它会自动从app/models/foo.rb
加载。之前它也可以从lib/foo.rb
加载。 (这些目录app/models
和lib
称为自动加载路径。)Rails团队决定从第3版中的自动加载路径中删除lib。你仍然可以把它还掉。但是鼓励在lib中留下频繁更改和项目特定的文件。如果您的某些内容不属于任何默认应用程序子目录(如app / models或app / controllers),则不必将其放在lib中。您可以添加自己的子目录。例如,我有app/presenters
。如果您想了解更多信息,旧问题跟踪器上有a discussion。