从包含的 gem 中查找项目的根目录



这是场景。我正在写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'

最新更新