这是场景。我正在编写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
)的目标功能。
相信这是一个充分的解释,请告诉我是否需要澄清!
答案 0 :(得分:2)
大多数现代宝石都不会寻找特定的配置文件。相反,他们希望执行任何名称的配置文件,这将通过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'