Was ist der beste Weg app spezifische Konfiguration in Schienen zu speichern?
-
02-07-2019 - |
Frage
Ich brauche app spezifische Konfiguration in Schienen zu speichern. Aber es muss sein:
- erreichbar in einer beliebigen Datei (Model, View, Helfer und Controller
- Umgebung angegeben (oder nicht), dass jede Umgebung bedeutet, können die configs in environment.rb angegebenen überschreiben
Ich habe versucht, environment.rb zu verwenden und setzen so etwas wie
USE_USER_APP = true
, die ich gearbeitet, aber bei dem Versuch, es in einer bestimmten Umgebung zu überschreiben, es wird nicht funktionieren, weil production.rb, zum Beispiel, scheint in der Rails zu sein. Initializer.run Block
So, anyone?
Lösung
Ich half ein Freund einrichten die Lösung von Ricardo gestern erwähnt. Wir gehackt es ein bisschen durch die Datei mit etwas YAML Laden ähnlich wie diese (aus dem Gedächtnis gehen hier):
require 'ostruct'
require 'yaml'
require 'erb'
#config = OpenStruct.new(YAML.load_file("#{RAILS_ROOT}/config/config.yml"))
config = OpenStruct.new(YAML.load(ERB.new(File.read("#{RAILS_ROOT}/config/config.yml")).result))
env_config = config.send(RAILS_ENV)
config.common.update(env_config) unless env_config.nil?
::AppConfig = OpenStruct.new(config.common)
Dies erlaubt ihm Ruby-Code in der Config, wie in RHTML einbetten:
development:
path_to_something: <%= RAILS_ROOT %>/config/something.yml
Andere Tipps
Schauen Sie sich Configatron: http://github.com/markbates/configatron/tree/master
Ich habe noch, es zu benutzen, aber er aktiv nun die Entwicklung und sieht ganz nett.
Das einfachste, was zu tun ist, eine Klasse Variable von Ihrem environment.rb einzustellen. Ich habe dies für Google Analytics getan. Im Grunde möchte ich einen anderen Schlüssel je nachdem, welche Umwelt Ich bin in so die Entwicklung oder die Inszenierung nicht die Metriken Skew.
Dies ist, wie ich es tat.
In lib/analytics/google_analytics.rb
:
module Analytics
class GoogleAnalytics
@@account_id = nil
cattr_accessor :account_id
end
end
Und dann in environment.rb
oder in environments/production.rb
oder eine der anderen Umgebungsdateien:
Analytics::GoogleAnalytics.account_id = "xxxxxxxxx"
Dann überall Sie Referenz definiert, sagt das Standard-Layout mit dem Google Analytics JavaScript, um es einfach Analytics::GoogleAnalytics.account_id
nennen.
fand ich eine gute Möglichkeit, hier
Verwenden von Umgebungsvariablen. Heroku verwendet diese. Denken Sie daran, dass, wenn Sie die Konfiguration in der Codebasis zu halten, kann jeder mit Zugriff auf den Code Zugang zu geheimer Konfiguration hat (aws api Schlüssel, Gateway api Schlüssel, etc).
daemontool der envdir ist eine gute Werkzeugkonfiguration für die Einstellung, ich bin ziemlich sicher, das ist, was Heroku verwendet Anwendung ihre Umgebungsvariablen zu geben.
habe ich Rails Einstellungen Cached verwendet.
Es ist sehr einfach zu bedienen, hält Ihre Konfigurationswerte im Cache gespeichert und ermöglicht es Ihnen, sie dynamisch zu ändern.