首页 > 解决方案 > 为什么在 Rails 中使用 /app/lib 而不是 /lib?

问题描述

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

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

此外,还有:

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

我的问题是:

这些陈述是否有任何事实,即 using/app/lib优于/lib

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

这些评论是否只有特定的背景才有意义?

标签: ruby-on-railsrubysidekiq

解决方案


以我的经验app/lib更容易使用。你可以坚持Class MathFunction使用类似的东西并在其他地方(例如控制器或模块)使用MathFunction.sqrRoot.

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

我需要使用该lib目录的唯一时间是进行自定义 rake 任务。否则我坚持app/lib


推荐阅读