这是场景。我正在写GemB
,我计划在ProjectA
中使用它,但我想以非特定的方式编写GemB
(我应该这样做(。我希望GemB
在"常规"project_a/config/gem_b.yml
下查找"配置"文件
如果该文件不存在,GemB
可以默认为自己的gemb/config/default.yml
ProjectA
(可能是gem/rails-engine/rails-app等的变体( GemB
(绝对是宝石(
有没有一种动态的方式让GemB
获得ProjectA
的根(使用它的项目(?如果我能预测名称,我可以调用ProjectA.root
(可能(,所以你可能会建议调用Rails.root
但我不能保证它会在Rails
项目中使用(在这种情况下,无论如何都不太可能,基于 GemB
的目标功能(。
相信这是一个足够的解释,如果我需要澄清,请告诉我!
大多数现代 gem 不会寻找特定的配置文件。相反,他们期望执行任何名称的配置文件,该文件将通过 gem 类名上的 .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'