为什么在Rails中使用/app/lib而不是/lib?

12
在sidekiq文档中,有这个引用关于在与自动加载错误相关的Rails项目中更喜欢使用/app/lib而不是/lib

lib/目录只会带来痛苦。将代码移动到app/lib/中,并确保内部代码遵循类/文件名约定。

另外,还有:

不要在autoload_paths或eager_load_paths中配置额外路径。那是一个hack;遵循惯例!任何位于app/下面的目录都可能包含Ruby代码,您不需要显式地配置任何内容。

我的问题是:
这些说法是否有道理,使用/app/lib/lib更好吗?
这只对自动加载的Rails相关对象(如AR模型、控制器、作业等)有帮助吗?还是也适用于POROs?
这些评论只有在特定的上下文中才有意义吗?

3
我认为不使用自动加载是将外部类放入“lib”文件夹的原因之一。我不会尝试让自动加载与“lib”文件夹配合使用,而是始终使用显式的“require”从“lib”文件夹加载功能。 - spickermann
1个回答

17

根据我的经验,app/lib 更易于使用。你可以直接插入像 Class MathFunction 这样的内容,并在其他地方(例如控制器或模块)中使用 MathFunction.sqrRoot

要使用 /lib,你需要用 autoload_paths 配置你的 Rails 应用程序。autoload_paths 还需要一些调整才能在生产环境中正常工作。Matz本人不赞成使用autoload,因为它正在被弃用的过程中。

我需要使用 lib 目录的唯一时候是为了创建自定义 Rake 任务。否则我都使用 app/lib


1
Matz已经撤回了有关autoload的提议,请查看您链接的末尾。 - Alireza mohagheghi
@Alirezamohagheghi 是正确的。我最初在4年前回答了这个问题,当时它仍然相关。 - Joseph Cho
@Alirezamohagheghi 是正确的,Matz 撤回了他的提议。不过答案仍然适用,通常我会将 /lib 保留给特定于 Rails 的自定义 Rake 任务,而将 app/lib 用于我想要重用的代码。 - Joseph Cho

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接