Für die allgemeine Anwendungskonfiguration, die nicht in einer Datenbanktabelle gespeichert werden muss, möchte ich eine config.yml
Datei im Konfigurationsverzeichnis erstellen . In Ihrem Beispiel könnte es so aussehen:
defaults: &defaults
audiocast_uri_format: http://blablalba/blabbitybla/yadda
development:
<<: *defaults
test:
<<: *defaults
production:
<<: *defaults
Diese Konfigurationsdatei wird von einem benutzerdefinierten Initialisierer in config / initializers geladen :
# Rails 2
APP_CONFIG = YAML.load_file("#{RAILS_ROOT}/config/config.yml")[RAILS_ENV]
# Rails 3+
APP_CONFIG = YAML.load_file(Rails.root.join('config/config.yml'))[Rails.env]
Wenn Sie Rails 3 verwenden, stellen Sie sicher, dass Sie Ihrem relativen Konfigurationspfad nicht versehentlich einen führenden Schrägstrich hinzufügen.
Sie können den Wert dann abrufen mit:
uri_format = APP_CONFIG['audiocast_uri_format']
Weitere Informationen finden Sie in diesem Railscast .
YAML::ENGINE.yamler = 'syck'
dies funktionieren. Stackoverflow.com/a/6140900/414220RAILS_ENV
mitRails.env
undRAILS_ROOT
mitRails.root
.Rails.application.config.whatever_you_want = YAML.load_file(Rails.root.join('config', 'config.yml'))[Rails.env]
Die Rails 3-Version des Initialisierungscodes lautet wie folgt (RAILS_ROOT & RAILS_ENV sind veraltet).
APP_CONFIG = YAML.load_file(Rails.root.join('config', 'config.yml'))[Rails.env]
Außerdem verwendet Ruby 1.9.3 Psych, wodurch bei Zusammenführungsschlüsseln zwischen Groß- und Kleinschreibung unterschieden wird. Sie müssen daher Ihre Konfigurationsdatei ändern, um dies zu berücksichtigen, z
quelle
"#{Rails.root.to_s}"
;"#{Rails.root}"
funktioniert.Rails.root.join('config', 'config.yml')
anstelle von"#{Rails.root.to_s}/config/config.yml"
AppName::Application.config.custom
Schienen> = 4.2
Erstellen Sie einfach eine
YAML
Datei imconfig/
Verzeichnis, zum Beispiel :config/neo4j.yml
.Der Inhalt von
neo4j.yml
kann wie folgt aussehen (Der Einfachheit halber habe ich für alle Umgebungen die Standardeinstellung verwendet):in
config/application.rb
:Jetzt ist Ihre benutzerdefinierte Konfiguration wie folgt zugänglich:
Mehr Info
Das offizielle API-Dokument von Rails beschreibt die
config_for
Methode wie folgt :Wenn Sie keine
yaml
Datei verwenden möchtenWie der offizielle Leitfaden von Rails sagt:
Beispiel
Offizielle Referenz für
config_for
Methode | Offizieller Rails Guidequelle
Schritt 1: Erstellen Sie config / initializers / appconfig.rb
Schritt 2: Erstellen Sie config / config.yml
Schritt 3: Holen Sie sich Konstanten an eine beliebige Stelle im Code
quelle
Ich wollte dies nur für die neuesten coolen Sachen in Rails 4.2 und 5 aktualisieren. Sie können dies jetzt in jeder Ihrer
config/**/*.rb
Dateien tun :(und das ist ein wörtliches
x
Wort, dh dasconfig.x.
muss buchstäblich so sein, und dann können Sie nach dem hinzufügen, was Sie wollenx
)... und dies wird in Ihrer App verfügbar sein als:
Weitere Informationen finden Sie hier: http://guides.rubyonrails.org/configuring.html#custom-configuration
quelle
x
.You can configure your own code through the Rails configuration object with custom configuration under either the config.x namespace, or config directly. The key difference between these two is that you should be using config.x if you are defining nested configuration (ex: config.x.nested.nested.hi), and just config for single level configuration (ex: config.hello).
Quelle : guides.rubyonrails.org/configuring.html#custom-configurationNur ein paar zusätzliche Infos zu diesem Thema:
Mit ".with_indifferent_access" können Sie mit einem String-Schlüssel oder einem entsprechenden Symbolschlüssel auf die Werte im Hash zugreifen.
z.B.
APP_CONFIG['audiocast_uri_format'] => 'http://blablalba/blabbitybla/yadda'
APP_CONFIG[:audiocast_uri_format] => 'http://blablalba/blabbitybla/yadda'
Rein praktisch, aber ich ziehe es vor, meine Schlüssel als Symbole darzustellen.
quelle
Ich verwende etwas Ähnliches wie John für Rails 3.0 / 3.1, aber ich muss die Datei zuerst analysieren:
Auf diese Weise kann ich ERB in meiner Konfiguration verwenden, wenn dies erforderlich ist, z. B. das Lesen der Redistogo-URL von Heroku:
quelle
Rails 4
So erstellen Sie ein benutzerdefiniertes Konfigurations-Yaml und laden es (und stellen es Ihrer App zur Verfügung), ähnlich wie
database_configuration
.Erstellen Sie Ihre
*.yml
, in meinem Fall brauchte ich eine Redis-Konfigurationsdatei.config/redis.yml
Laden Sie dann die Konfiguration
config/application.rb
Greifen Sie auf die Werte zu:
Rails.configuration.redis_configuration[Rails.env]
ähnlich wie Sie Zugriff auf Ihredatabase.yml
von haben könnenRails.configuration.database_configuration[Rails.env]
quelle
Rails.configuration.redis_configuration = YAML.load_file("#{Rails.root}/config/redis.yml")[Rails.env]
. In Rails 4.2 und höher ist Smathys Antwort wahrscheinlich ein einfacherer Weg.Aufbauend auf der eleganten Lösung von Omer Aslam habe ich beschlossen, die Schlüssel in Symbole umzuwandeln. Die einzige Änderung ist:
Auf diese Weise können Sie Werte durch Symbole als Schlüssel referenzieren, z
Das scheint mir ordentlicher zu sein.
(Als Antwort veröffentlicht, da mein Ruf nicht hoch genug ist, um Omers Antwort zu kommentieren.)
quelle
Ich mag simpleconfig . Es ermöglicht Ihnen die Konfiguration pro Umgebung.
quelle
Siehe meine Antwort auf Wo ist der beste Ort zum Speichern von Anwendungsparametern: Datenbank, Datei, Code ...?
Eine Variation von dem, was Sie darin hatten, dass es ein einfacher Verweis auf eine andere Datei ist. Es sieht, dass environment.rb nicht ständig aktualisiert wird und keinen Haufen app-spezifischer Inhalte enthält. Obwohl es keine konkrete Antwort auf Ihre Frage gibt, ob es der Rails-Weg ist, wird es dort vielleicht eine Diskussion darüber geben.
quelle
Ich bevorzuge den Zugriff auf Einstellungen über den globalen Anwendungsstapel. Ich vermeide übermäßige globale Variablen im lokalen Bereich.
config / initializers / myconfig.rb
Und mit darauf zugreifen.
quelle
Meine Methode zum Laden von Einstellungen vor der Initialisierung von Rails
Ermöglicht die Verwendung von Einstellungen bei der Rails-Initialisierung und die Konfiguration von Einstellungen pro Umgebung
Sie können Einstellungen auf zwei Arten erhalten: Einstellungen ['E-Mail'] oder Einstellungen.email
quelle
Mein bester Weg zur benutzerdefinierten Konfiguration mit Raise-Meldung, wenn settings.yml fehlt.
wird von einem benutzerdefinierten Initialisierer in config / initializers / custom_config.rb geladen
Erstellen Sie eine YAML in config / settings.yml
quelle