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

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

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

共收到 5 条回复

#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 现在的我还没能力去写,等我有能力了我再去写

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