2016-11-22 47 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來管理環境變量。