2016-11-22 46 views
1

在写一个rails 4应用程序的原因我最近一直想知道在哪里以及如何存储自定义配置信息?具体来说,我的意思是像应用标题,特殊电子邮件地址,或许主题选项等,我想在整个我的应用程序中使用环境变量或其他结构引用等。我一直在周围挖一点, - 部署前 - 最后用一记漂亮的初始化建立这样如何正确存储和访问全局应用配置设置?

require 'ostruct'                                          

all_config = YAML.load_file("#{Rails.root}/config/app_config.yml") || {} 
env_config = all_config[Rails.env] || {} 
AppConfig = OpenStruct.new(env_config) 

其内容如下YAML文件(app_config.yml)的OpenStruct

default: &default                                          
    general: 
    app_title: MyName 
    maintainer_email_address: [email protected] 

development: 
    <<: *default 

test: 
    <<: *default 

production: 
    <<: *default 

在开发过程中,我非常高兴通过AppConfig.general.*访问我必须访问的所有内容,但不幸的是,这并不适用于生产环境,尝试启动服务器/控制台最终导致了Uninitialized constant AppConfig-错误。

现在我有两个到三个问题:

1)可我认为这并不在生产,由于文件,其中production.rb近前加载初始化(的加载顺序工作 - >的AppConfig作为全局变量不存在)

2)如果是:为什么这个工作在开发中?那里有什么不同?

3)存储上述信息的最佳做法是什么?我的愿望是能够通过某种用户/管理界面舒适地获取和设置这些信息。从那里我不想惹我的环境 - 文件太难...

好吧,我希望有人能帮助我,在此先感谢! Andi

+0

http://stackoverflow.com/questions/2127960/ruby-on-rails-storing-application-configuration/40306232#40306232 – prograils

+0

感谢您的提示。不幸的是,它不回答问题1和2.你有任何线索吗? –

回答

1

添加您的配置文件在RAILS_ROOT/config目录。在RAILS_ROOT/config/initializers目录

# config/foo.yml 
development: 
api_key: 'my_development_api_key' 

staging: 
    api_key: <%= ENV['API_KEY'] %> 

production: 
    api_key: <%= ENV['API_KEY'] %> 

添加初始化文件

# config/initializers/foo.rb 
foo_config = Rails.application.config_for(:foo) 

Rails.application.configure do 
    config.foo = ActiveSupport::OrderedOptions.new 
    config.foo.api_key = foo_config[:api_key] 
end 

使用您的配置在你的代码。

Rails.configuration.foo.api_key 

有时您不能在代码中提交您的密钥和其他凭据。在这种情况下,使用环境变量。我使用dotenv gem来管理环境变量。