我有两个宝石“CoreGem”和“AddonGem”。 Addon Gem增加了额外的功能,将覆盖核心宝石。
如何确保如果添加第二个gem,它将覆盖第一个gem的视图和资产。
到目前为止,它在添加到主应用程序时起作用:
config.railties_order = [ :main_app, AddonGem::Engine, :all]
但是我想在AddonGem中做到这一点。
由于
答案 0 :(得分:2)
railties_order
的地方 railties_order
:
https://github.com/rails/rails/blob/master/railties/lib/rails/application.rb#L317
确定要运行的initializer
块的顺序,
https://github.com/rails/rails/blob/master/railties/lib/rails/application.rb#L337
在其他宝石中找到。
https://github.com/rails/rails/blob/master/railties/lib/rails/application.rb#L47
因此,在railties_order
块中设置initializer
将毫无意义,因为在调用initializer
块时,railties_order
已经设置并且正在使用申请的其余部分。
initializer
内部显然有更多Rails::Application::Bootstrap
块。
https://github.com/rails/rails/blob/master/railties/lib/rails/application/bootstrap.rb
这些是在主应用程序的初始化程序块之前添加的:
https://github.com/rails/rails/blob/master/railties/lib/rails/application.rb#L262
那么也许你可以使用一些初始化器来修补Bootstrap模块?我猜这是你的电话。
答案 1 :(得分:-1)
在AddonGem
中创建一个注入此代码的生成器
config.railties_order = [ :main_app, AddonGem::Engine, :all]
主应用程序中的,如addongem:install
命令。
只是为了完成,虽然这是一个简单的方法。应该可以将插件挂在核心的某处。