ruby-on-rails - 将遗留 lib 文件夹移动到更现代的结构中
问题描述
我lib
在 Rails 3 的一个文件夹中有几个模块:
/lib
/lib/library
/lib/library/library.rb #This imports with requires, file_a, file_b, etc...
/lib/library/file_a.rb
/lib/library/file_b.rb
/lib/library/file_c.rb
我正在尝试确定使用 Rails 6 实现此功能的最佳方式。我在 Zeitwerk 上阅读了一些内容。
我的结论是我需要将这个库移动到app/lib
自动加载中。
但是,我的库仍然没有加载。关于如何在迁移的 Rails 服务器上导入此库的任何建议或指示?
解决方案
您可以将文件移动到以下结构
/app/lib
/app/lib/library
/app/lib/library/library.rb # you can remove this file if it only contains requires
/app/lib/library/file_a.rb
/app/lib/library/file_b.rb
/app/lib/library/file_c.rb
然后,您需要为您的类和模块应用以下命名约定:
# /app/lib/library/file_a.rb
Module Library::FileA
# your code
end
以下是 Rails 指南的解释:https ://edgeguides.rubyonrails.org/autoloading_and_reloading_constants.html#project-structure
在 Rails 应用程序中,文件名必须与它们定义的常量相匹配,目录充当命名空间。
例如,文件 app/helpers/users_helper.rb 应该定义 UsersHelper,文件 app/controllers/admin/payments_controller.rb 应该定义 Admin::PaymentsController。
注意:即使这不是您的问题,您也需要知道应用程序特定的库是否应该放在app/lib
orlib
目录中存在争议。如果您选择lib
,您可以继续加载您的文件,require
或者您可以将文件夹添加到自动加载路径
推荐阅读
- php - 如果电子邮件不在数据库中,则 Google 登录重定向回登录页面
- javascript - 如果满足所有条件,如何使 .addEventListener 仅执行函数?
- node.js - Docker 的 Angular 图像因依赖错误而退出
- reactjs - 找不到模块“sass”
- python-3.x - 在循环浏览程序的某些部分时处理菜单输入?
- makefile - 多变量赋值的Makefile问题
- java - 向 Rediffmail 发送电子邮件意图,从正文中删除新行
- python - 如何为多个输入文件运行相同的python代码
- android - 模拟器 Android - React Native
- android - 如何测试应用下载和激活?