从包含的 gem 中查找项目的根目录
Find root of project from included gem
场景如下。我正在写 GemB
,我打算在 ProjectA
中使用它,但我想以一种非特定的方式写 GemB
(我应该这样做)。我希望 GemB
在 "conventional" project_a/config/gem_b.yml
下查找 "config" 文件
如果该文件不存在,GemB
可以默认为它自己的 gemb/config/default.yml
ProjectA
(可能是 gem/rails-engine/rails-app 等的变体)
GemB
(绝对是gem)
GemB
是否有动态方法获取 ProjectA
的根(正在使用它的项目)?如果我能预测名字,我可以调用 ProjectA.root
(可能),所以你可能建议调用 Rails.root
但我不能保证它会在 Rails
项目中使用,(在这种情况下无论如何都不太可能,基于 GemB
).
的目标功能
相信这是一个充分的解释,如果我需要澄清,请告诉我!
大多数现代 gem 不会查找特定的配置文件。相反,他们希望执行任何名称的配置文件,这将通过 gem 的 class 名称上的 .config
变量设置配置。例如,我可能有这个配置文件:
# config/initializers/ams.rb
ActiveModelSerializers.config.adapter = :json_api
ActiveModelSerializers.config.key_transform = :camel_lower
现在,文件的位置或名称都无关紧要了。只要执行了代码,ActiveModelSerializers 就可以查看自己的 ActiveModelSerializers.config
变量,一切顺利。
如果您想要扩展配置(例如,通过 .yml 文件),您可以创建一个 .config.path
设置并指示 gem 的用户自己设置路径,然后在他们选择的位置创建一个文件:
# config/initializers/gem_b.rb
GemB.config.path = '/config/gem_b.yml'
场景如下。我正在写 GemB
,我打算在 ProjectA
中使用它,但我想以一种非特定的方式写 GemB
(我应该这样做)。我希望 GemB
在 "conventional" project_a/config/gem_b.yml
如果该文件不存在,GemB
可以默认为它自己的 gemb/config/default.yml
ProjectA
(可能是 gem/rails-engine/rails-app 等的变体)
GemB
(绝对是gem)
GemB
是否有动态方法获取 ProjectA
的根(正在使用它的项目)?如果我能预测名字,我可以调用 ProjectA.root
(可能),所以你可能建议调用 Rails.root
但我不能保证它会在 Rails
项目中使用,(在这种情况下无论如何都不太可能,基于 GemB
).
相信这是一个充分的解释,如果我需要澄清,请告诉我!
大多数现代 gem 不会查找特定的配置文件。相反,他们希望执行任何名称的配置文件,这将通过 gem 的 class 名称上的 .config
变量设置配置。例如,我可能有这个配置文件:
# config/initializers/ams.rb
ActiveModelSerializers.config.adapter = :json_api
ActiveModelSerializers.config.key_transform = :camel_lower
现在,文件的位置或名称都无关紧要了。只要执行了代码,ActiveModelSerializers 就可以查看自己的 ActiveModelSerializers.config
变量,一切顺利。
如果您想要扩展配置(例如,通过 .yml 文件),您可以创建一个 .config.path
设置并指示 gem 的用户自己设置路径,然后在他们选择的位置创建一个文件:
# config/initializers/gem_b.rb
GemB.config.path = '/config/gem_b.yml'