365 Stimmen

Wie man benutzerdefinierte Konfigurationsvariablen in Rails definiert

Ich habe mich gefragt, wie man benutzerdefinierte Konfigurationsvariablen zu einer Rails-Anwendung hinzufügen und wie man auf sie im Controller zugreifen, z.B. möchte ich in der Lage sein, ein upload_directory in den Konfigurationsdateien sagen development.rb zu definieren und in der Lage sein, es in einem meiner Controller zugreifen.

Zweitens hatte ich vor, S3-Unterstützung für Uploads in meiner Anwendung zu haben, wenn ich eine Yaml-Datei mit dem S3-Zugang, geheimen Schlüssel hinzufügen wollte, wie initialisiere ich es in meiner Rails-App und wie greife ich auf die Werte zu, die ich in dieser Konfigurationsdatei definiert habe.

386voto

Jack Pratt Punkte 3847

In Rails 3 können anwendungsspezifische, benutzerdefinierte Konfigurationsdaten im Konfigurationsobjekt der Anwendung platziert werden. Die Konfiguration kann in den Initialisierungsdateien oder den Umgebungsdateien zugewiesen werden - zum Beispiel für eine bestimmte Anwendung MyApp :

MyApp::Application.config.custom_config_variable = :my_config_setting

oder

Rails.configuration.custom_config_variable = :my_config_setting

Um die Einstellung zu lesen, rufen Sie einfach die Konfigurationsvariable auf, ohne sie zu setzen:

Rails.configuration.custom_config_variable
=> :my_config_setting

UPDATE Rails 4

In Rails 4 gibt es dafür einen neuen Weg => http://guides.rubyonrails.org/configuring.html#custom-configuration

enter image description here

172voto

khelll Punkte 22794

Aktualisierung 1

Sehr empfehlenswert: Ich gehe mit Rails-Konfiguration heutzutage wegen der feinkörnigen Kontrolle, die sie bietet.

Aktualisierung2

Wenn Sie eine schnelle Lösung suchen, dann prüfen Sie Die Antwort von Jack Pratt unten.

Obwohl meine ursprüngliche Antwort unten immer noch funktioniert, ist diese Antwort jetzt veraltet. Ich empfehle, sich die Updates 1 und 2 anzusehen.

Ursprüngliche Antwort:

Für eine schnelle Lösung sehen Sie sich die "YAML-Konfigurationsdatei" an Leinwandbesetzung von Ryan Bates dürfte sehr hilfreich sein.

Zusammengefasst:

# config/initializers/load_config.rb
APP_CONFIG = YAML.load_file("#{Rails.root}/config/config.yml")[Rails.env]

# application.rb
if APP_CONFIG['perform_authentication']
  # Do stuff
end

70voto

Rob Dawson Punkte 1336

In Rails 3.0.5, funktionierte der folgende Ansatz für mich:

Unter config/environments/development.rb schreiben

config.custom_config_key = :config_value

Der Wert custom_config_key kann dann von anderen Dateien aus referenziert werden, indem

Rails.application.config.custom_config_key

34voto

pymkin Punkte 4084

In Rails 4

Vorausgesetzt, Sie haben Ihre benutzerdefinierten Variablen in eine yaml-Datei eingegeben:

# config/acme.yml
development:
  :api_user: 'joe'
  :api_pass: 's4cret'
  :timeout: 20

Erstellen Sie einen Initialisierer, um sie zu laden:

# config/initializers/acme.rb
acme_config = Rails.application.config_for :acme

Rails.application.configure do
  config.acme = ActiveSupport::OrderedOptions.new
  config.acme.api_user = acme_config[:api_user]
  config.acme.api_pass = acme_config[:api_pass]
  config.acme.timeout  = acme_config[:timeout]
end

Jetzt können Sie überall in Ihrer Anwendung auf diese Werte zugreifen, etwa so:

Rails.configuration.acme.api_user

Es ist praktisch, dass Rails.application.config_for :acme lädt Ihre acme.yml und verwenden Sie die richtige Umgebung.

31voto

Alain Beauvois Punkte 5726

Dies funktioniert in Rails 3.1:

in config/environment.rb (oder in config/environments/.., um eine bestimmte Umgebung anzusteuern) :

YourApp::Application.config.yourKey = 'foo'

Dies wird in Controllern oder Ansichten wie dieser zugänglich sein:

YourApp::Application.config.yourKey

(YourApp sollte durch den Namen Ihrer Anwendung ersetzt werden.)

Hinweis : Es ist Ruby-Code, wenn Sie also viele Konfigurationsschlüssel haben, können Sie dies tun:

in config/environment.rb :

YourApp::Application.configure do
  config.something = foo
  config.....
  config....
  .
  config....
end

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X