如何修改 Rails 中的配置变量 如 asset_host 一般情况下,修改 asset_host 只要在 config/environments/production.rb 文件中配置就可以了,不过现在的需求是在项目加载完后 asset_host 的值通过计算得到。 具体的计算将在 gem 中编写。 但 rails 和 gem 的加载先后顺序决定不能直接调用 gem 中的方法,所以希望能在项目加载完成后再去设置 asset_host 的值,求一种比较好的解决方法
https://github.com/rails/rails/blob/master/railties/lib/rails/application.rb#L33
#1 楼 @cantin 你的意思是写一个 config.before_configuration callbacks config.after_configuration callbacks,加载 gem 然后配置想要配置的变量?? 可是这样写,是不是有点不舒服,不能用补丁的方式将原来的变量替换掉吗??
#2 楼 @tiseheaini 可是这样还是不对,rails 会先加载 config/environments/#{RAILS_ENV}.rb 然后再加载 gem initialization, config/environments/#{RAILS_ENV}.rb 里面的值已经初始化完成,gem 里面的代码后执行,这样是没办法给 rails 写回调方法。
你的 gem 是 engine?
你可以在 initializers/里面调用 Gem 的方法取得你要的值 赋给 Rails.application.config.asset_host(没试过,应该可以)
如果要写入 engine 里面, 在 engine/lib/engine_name.rb 里写个 initializer hook
class Engine < ::Rails::Engine initializer :assets do |config| Rails.application.config.assets_host = SomeClass.some_method end end
#4 楼 @cantin 谢谢你的帮助,不是 engine 现在的我还没能力去写,等我有能力了我再去写