首页 > 解决方案 > 在 Rails 5(以及带有经典自动加载器的 6)中包含 `lib/` 文件的推荐方法是什么?

问题描述

过去,在lib/目录中有文件的 Rails 开发人员被告知将 lib 目录添加到自动加载路径,方法是在config/application.rb:

config.autoload_paths << "lib"

但是,最新的 Rails 指南说现在不鼓励这样做:

...过去(在 Rails 5 之前)单独使用 autoload_paths 开发人员可能会配置 autoload_paths 以添加额外的位置(例如lib,几年前曾经是自动加载路径列表,但现在不再是)。但是,现在大多数情况下不鼓励这样做,因为它可能会导致仅生产错误。可以向 config.eager_load_paths 和 config.autoload_paths 添加新位置,但使用风险自负。

(强调我的)

因此,我们被要求要求lib/文件。从 Rails 指南:

当然,在 autoloaded 文件中使用 require 来加载普通的 3rd 方库是可以的,Rails 能够区分它们的常量,它们不会被标记为 autoloaded。

但是,这意味着这些required 文件中的更改将不会被注意到并在下一个请求中提供。因此,为了使lib/文件发生这种情况,我们必须将它们添加到autoload_paths... 上面不鼓励这样做。

那么lib在你的应用程序中包含文件的合适方法是什么,自动检测 Rails 5 中的更改,或者启用了经典自动加载器的 Rails 6?

标签: ruby-on-rails

解决方案


根据这个讨论Rails 5: Load lib files in production你应该把你的库放在app/lib. 或不。关于“适当”的方式有不同的看法。


推荐阅读