将旧的lib文件夹移到更现代的结构中



我在Rails3:上的lib文件夹上有几个模块

/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

我正在尝试确定使用Rails6实现这一点的最佳方式。我读了一些关于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

以下是导轨的说明:https://edgeguides.rubyonrails.org/autoloading_and_reloading_constants.html#project-结构

在Rails应用程序中,文件名必须与常量匹配定义,其中目录充当命名空间。

例如,文件app/helpers/users_helper.rb应该定义UsersHelper和文件app/controllers/admin/payments_controller.rb应定义Admin::PaymentsController。

NB:即使这不是您的问题,您也需要知道,应用程序特定库应该放在app/lib还是lib目录中存在争议。如果您选择lib,您可以继续使用require加载文件,也可以将文件夹添加到自动加载路径

相关内容

  • 没有找到相关文章

最新更新