ruby-on-rails - 在 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。
但是,这意味着这些require
d 文件中的更改将不会被注意到并在下一个请求中提供。因此,为了使lib/
文件发生这种情况,我们必须将它们添加到autoload_paths
... 上面不鼓励这样做。
那么lib
在你的应用程序中包含文件的合适方法是什么,自动检测 Rails 5 中的更改,或者启用了经典自动加载器的 Rails 6?
解决方案
根据这个讨论Rails 5: Load lib files in production你应该把你的库放在app/lib
. 或不。关于“适当”的方式有不同的看法。
推荐阅读
- javascript - 使用Javascript根据子编号添加CSS类(HTML)
- http - 正在处理的项目的 HTTP 状态代码
- javascript - auth0.js 无法获取刷新令牌
- javascript - React js:不使用引用(Ref),从父级访问子状态
- sql-server - 如何通过powershell运行sql脚本(脚本/命令)
- java - 为什么我只能先关闭socket的输出流再关闭输入流?
- apache - 阿帕奇网络安全
- android - kotlin 中的接口回调不需要类型参数
- python - 在 plotly y 轴上拟合 timedelta
- reactjs - React 查询在新页面中显示上一页数据