2012-02-13 85 views
3

我正在使用初始化程序将一个config.yml文件加载到一个AppConfig散列中,该散列提供对环境变量的访问。为了生产,我使用服务器上设置的环境变量。如果未设置环境变量(即在开发和测试中),我正在使用以下代码回退到配置变量。在rails环境文件中可用的配置变量

ENV['FACEBOOK_API_KEY'] || AppConfig['facebook_api_key'] 

我的问题是,我需要一些变量在特定的环境文件(development.rb/production.rb等)可用,但initialzers之前该文件被加载。我应该如何处理这个问题?

回答

8

查看Configuration Initialization Events的Rails指南。有些事件在进行这种配置时可以挂钩。

总之你可以配置用于初始化后进行环境:

#config/environments/development.rb 
YourApp::Application.configure do 
    config.after_initialize do 
    #do some configuration after all initialisers have run 
    end 
end 
+0

谢谢。那正是我需要的。它实际上after_initialize NOT after_initializion btw。 – Undistraction 2012-02-13 16:08:54

+0

哈 - 谢谢。我正在考虑初始化美式风格的拼写,而我的手指决定输入初始化。 – roo 2012-02-14 03:17:03

0

如果有一种方法可以创建一个两层的结构是怎样的database.yml你总是可以定义在每个环境分别进行配置相同的文件,然后参考相应的版本:

ENV['FACEBOOK_API_KEY'] || AppConfig[Rails.env] && AppConfig[Rails.env]['facebook_api_key'] 
+1

谢谢,但那实际上就是我在做什么,只是我没有为环境使用单独的散列,因为我不需要一次为多个存储配置值。 – Undistraction 2012-02-13 16:07:47

相关问题