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

问题描述 投票:0回答:2

在 sidekiq 文档中,有 this quote 关于在与自动加载错误相关的 Rails 项目中更喜欢使用

/app/lib
而不是
/lib

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

此外,还有:

不要在autoload_paths或eager_load_paths中配置额外的路径。这是一个黑客行为;遵守约定! app/ 下的任何目录都可能包含 Ruby 代码,您不需要显式配置任何内容。

我的问题是:

这些使用

/app/lib
/lib
更好的说法是否属实?

这仅对自动加载 Rails 相关对象(例如 AR 模型、控制器、作业等)有帮助吗?或者它也会帮助 PORO 吗?

这些评论是否只有特定的上下文才有意义?

ruby-on-rails ruby sidekiq
2个回答
21
投票

根据我的经验,

app/lib
更容易使用。您可以直接插入类似
Class MathFunction
的内容,并通过
MathFunction.sqrRoot
在其他地方使用它(例如控制器或模块)。

要使用

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

我唯一需要使用

lib
目录的时候是为了制作自定义 rake 任务。否则我坚持
app/lib


0
投票

如今实现这一目标的最佳实践是将代码移至

app/lib
。只有您要重新加载的 Ruby 代码、任务或其他辅助文件在
lib
中才可以。

来源:Zeitwerk 的创造者 Xavier Noria


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

来源:Sidekiq 的问题和故障排除


使用此约定的 Rails 项目示例 - Mastodon

© www.soinside.com 2019 - 2024. All rights reserved.