2016-11-22 2 views
1

in der Ursache des Schreibens einer Rails 4 app Ich habe mich in letzter Zeit gefragt, wo und wie genau benutzerdefinierte Konfigurationsinformationen gespeichert werden? Genauer gesagt meine ich Dinge wie App-Titel, spezielle E-Mail-Adressen, vielleicht Theming-Optionen usw., die ich in meiner ganzen App mit entweder Umgebungsvariablen oder anderen Konstrukte beziehen möchte. Ich habe um ein wenig zu graben und - vor Bereitstellung - endete mit einem raffinierten initializer eine OpenStruct wie diesWie speichern und greifen Sie auf globale App-Konfigurationseinstellungen zu?

require 'ostruct'                                          

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

zu schaffen, das die folgenden yaml-Datei liest (app_config.yml)

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

development: 
    <<: *default 

test: 
    <<: *default 

production: 
    <<: *default 

Innerhalb der Entwicklung war ich total glücklich Zugriff auf alles, was ich über AppConfig.general.* zugreifen musste, aber das funktioniert leider nicht in der Produktion, versucht einen Server/Konsole zu starten, um einen Uninitialized constant AppConfig-Fehler zu erhöhen.

Jetzt habe ich zwei bis drei Fragen:

1) Kann ich davon ausgehen, dass dies nicht in der Produktion an die Last-Reihenfolge der Dateien durch nicht funktioniert, wo production.rbvor die initializer geladen wird (-> AppConfig da eine globale Variable nicht vorhanden ist)

2) Wenn ja: Warum funktioniert das in der Entwicklung? Was ist anders dort?

3) Was ist eine gute Praxis, um Informationen wie die oben genannten zu speichern? Mein Wunsch ist es, Informationen wie diese komfortabel über eine Art Benutzer-/Admin-Oberfläche zu bekommen und einzustellen. Von dort will ich nicht mit meiner Umgebung-Datei zu schwer ...

Allright, ich hoffe jemand kann mir da draußen helfen, danke im voraus! Andi

+0

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

+0

Danke für den Hinweis. Leider beantwortet es nicht die Fragen 1 und 2. Haben Sie eine Ahnung davon? –

Antwort

1

Fügen Sie Ihre Konfigurationsdatei im Verzeichnis RAILS_ROOT/config hinzu.

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

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

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

Add initializer Datei in RAILS_ROOT/config/initializers Verzeichnis

# 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 

Ihre Konfiguration in Ihrem Code verwenden.

Rails.configuration.foo.api_key 

Manchmal können Sie Ihre geheimen Schlüssel und andere Anmeldeinformationen nicht im Code festschreiben. Verwenden Sie in diesem Fall Umgebungsvariablen. Ich verwende dotenv gem, um Umgebungsvariablen zu verwalten.

Verwandte Themen