Rails 如何修改 Rails 中的配置变量 如 asset_host

tiseheaini · 2013年05月12日 · 最后由 tiseheaini 回复于 2013年05月12日 · 4178 次阅读

如何修改 Rails 中的配置变量 如 asset_host 一般情况下,修改 asset_host 只要在 config/environments/production.rb 文件中配置就可以了,不过现在的需求是在项目加载完后 asset_host 的值通过计算得到。 具体的计算将在 gem 中编写。 但 rails 和 gem 的加载先后顺序决定不能直接调用 gem 中的方法,所以希望能在项目加载完成后再去设置 asset_host 的值,求一种比较好的解决方法

#1 楼 @cantin 你的意思是写一个 config.before_configuration callbacks config.after_configuration callbacks,加载 gem 然后配置想要配置的变量?? 可是这样写,是不是有点不舒服,不能用补丁的方式将原来的变量替换掉吗??

#2 楼 @tiseheaini 可是这样还是不对,rails 会先加载 config/environments/#{RAILS_ENV}.rb 然后再加载 gem initializationconfig/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 现在的我还没能力去写,等我有能力了我再去写

需要 登录 后方可回复, 如果你还没有账号请 注册新账号