我在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
加载文件,也可以将文件夹添加到自动加载路径