首页 > 解决方案 > 将遗留 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 服务器上导入此库的任何建议或指示?

标签: ruby-on-railsrubyruby-on-rails-6

解决方案


您可以将文件移动到以下结构

/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/liborlib目录中存在争议。如果您选择lib,您可以继续加载您的文件,require或者您可以将文件夹添加到自动加载路径


推荐阅读