Ich habe mich gefragt, wie man einer Rails-Anwendung benutzerdefinierte Konfigurationsvariablen hinzufügt und wie man im Controller darauf zugreift. Zum Beispiel möchte ich in den Konfigurationsdateien ein upload_directory definieren können, z. B. development.rb, und in einer meiner Dateien darauf zugreifen können Steuerungen.
Zweitens plante ich S3-Unterstützung für Uploads in meiner Anwendung, wenn ich eine Yaml-Datei mit dem s3-Zugriff, dem geheimen Schlüssel, hinzufügen wollte, wie ich sie in meiner Rails-App initialisiere und wie ich auf die von mir definierten Werte zugreife in dieser Konfigurationsdatei.
Antworten:
Update 1
Sehr zu empfehlen: Ich gehe heutzutage mit Rails Config Gem für die feinkörnige Kontrolle, die es bietet.
Update2
Wenn Sie eine schnelle Lösung wünschen, überprüfen Sie die Antwort von Jack Pratt unten.
Obwohl meine ursprüngliche Antwort unten immer noch funktioniert, ist diese Antwort jetzt veraltet. Ich empfehle, die Updates 1 und 2 zu lesen.
Ursprüngliche Antwort:
Für eine schnelle Lösung sollte es sehr hilfreich sein, den Bildschirm "YAML-Konfigurationsdatei" von Ryan Bates anzusehen.
Zusammenfassend:
quelle
RAILS_ENV
mitRails.env
undRAILS_ROOT
mitRails.root
.In Rails 3 können anwendungsspezifische benutzerdefinierte Konfigurationsdaten im Anwendungskonfigurationsobjekt platziert werden. Die Konfiguration kann in den Initialisierungsdateien oder den Umgebungsdateien zugewiesen werden - beispielsweise für eine bestimmte Anwendung
MyApp
:oder
Um die Einstellung zu lesen, rufen Sie einfach die Konfigurationsvariable auf, ohne sie festzulegen:
UPDATE Rails 4
In Rails 4 gibt es dafür einen neuen Weg => http://guides.rubyonrails.org/configuring.html#custom-configuration
quelle
config/environments/production.rb
Konfiguration:config.whatever = false
Zugriff überall:Rails.configuration.whatever
undefined method
.In Rails 3.0.5 hat der folgende Ansatz für mich funktioniert:
In
config/environments/development.rb
, SchreibDer Wert
custom_config_key
kann dann aus anderen Dateien mit referenziert werdenquelle
undefined method
.method_missing': undefined method
erhalte die Fehlermeldung "... store 'for # <Rails :: Application :: Configuration: 0x007f9f735b7240> ...". Ich habe versucht, die Konfigurationsvariable "config.store.works" hinzuzufügen.store
ist. Um die Methode in dieser Antwort zu verwenden, können Sie entweder Ihre Variable umbenennenstore_works
oder einenconfig.store
Block mitworks
der darin definierten erstellen .Dies funktioniert in Schienen 3.1:
in config / environment.rb (oder in config / environment / .., um eine bestimmte Umgebung zu erreichen):
Dies ist in Controllern oder Ansichten wie diesen zugänglich:
(Ihre App sollte durch Ihren Anwendungsnamen ersetzt werden.)
Hinweis : Es handelt sich um Ruby-Code. Wenn Sie also viele Konfigurationsschlüssel haben, können Sie dies tun:
in config / environment.rb:
quelle
In Schienen 4
Angenommen, Sie fügen Ihre benutzerdefinierten Variablen in eine Yaml-Datei ein:
Erstellen Sie einen Initialisierer, um sie zu laden:
Jetzt können Sie überall in Ihrer App wie folgt auf diese Werte zugreifen:
Es ist praktisch, dass Sie
Rails.application.config_for :acme
Ihre ladenacme.yml
und die richtige Umgebung verwenden.quelle
Seit Rails 4.2 können Sie config / hi.yml ohne zusätzliche Edelsteine einfach mit verwenden
Rails.application.config_for :hi
.Zum Beispiel:
touch config/passwords.yml
touch config/initializers/constants.rb
und jetzt können Sie
AUTHENTICATION
konstant überall in Ihrer Anwendung verwenden:fügen Sie dann passwords.yml zuFügen Sie .gitignore : hinzu
echo /config/passwords.yml >> .gitignore
, erstellen Sie eine Beispieldatei für Ihren Komfortcp /config/passwords.yml /config/passwords.example.yml
und bearbeiten Sie dann einfach Ihre Beispieldatei in Ihrer Produktionskonsole mit den tatsächlichen Produktionswerten.quelle
Ich wollte dies nur für die neuesten coolen Sachen in Rails 4.2 aktualisieren. Sie können dies jetzt in jeder Ihrer
config/**/*.rb
Dateien tun :... und dies wird in Ihrer App verfügbar sein als:
Weitere Informationen finden Sie hier: http://guides.rubyonrails.org/configuring.html#custom-configuration
quelle
Schauen Sie sich dieses hübsche Juwel an, das genau das tut: https://github.com/mislav/choices
Auf diese Weise werden Ihre vertraulichen Daten in Open Source-Projekten nicht verfügbar gemacht
quelle
Ich habe ein einfaches Plugin für YAML-Einstellungen erstellt: Yettings
Es funktioniert ähnlich wie der Code in Khellls Antwort, aber Sie müssen nur diese YAML-Konfigurationsdatei hinzufügen:
Das Plugin erstellt dynamisch eine Klasse, mit der Sie auf die YML-Einstellungen als Klassenmethoden in Ihrer App zugreifen können:
Wenn Sie mehrere Einstellungsdateien mit eindeutigen Namen verwenden möchten, können Sie diese wie folgt in einem Unterverzeichnis in app / config ablegen:
Dann können Sie auf folgende Werte zugreifen:
Außerdem erhalten Sie Standardeinstellungen, die pro Umgebung überschrieben werden können. Sie können erb auch in der yml-Datei verwenden.
quelle
Ich mag das Settingslogic- Juwel sehr. Sehr einfach einzurichten und zu verwenden.
https://github.com/binarylogic/settingslogic
quelle
Wenn Sie Heroku verwenden oder auf andere Weise Ihre Anwendungseinstellungen als Umgebungsvariablen beibehalten müssen, ist das figaro- Juwel sehr hilfreich.
quelle
Ich verwende gerne Rails-Einstellungen für globale Konfigurationswerte, die über die Weboberfläche geändert werden müssen.
quelle
Etwas, das wir bei der Arbeit anfangen, ist der ActiveSupport Ordered Hash
So können Sie Ihre Konfiguration sauber in den Umgebungsdateien definieren, z
quelle
Ich würde einen guten Ansatz vorschlagen, wie Sie mit der Konfiguration in Ihrer Anwendung überhaupt umgehen sollen. Es gibt drei Grundregeln:
Um eine detailliertere Übersicht zu erhalten, folgen Sie diesem Link: Schienenkonfiguration auf die richtige Weise
quelle