it-swarm.com.de

So definieren Sie benutzerdefinierte Konfigurationsvariablen in rails

Ich habe mich gefragt, wie man einer Rails) - Anwendung benutzerdefinierte Konfigurationsvariablen hinzufügt und wie man auf diese in der Steuerung zugreift. Ich möchte beispielsweise ein upload_directory in den Konfigurationsdateien definieren, z. B. development.rb und in der Lage sein, in einem meiner Controller darauf zuzugreifen.

Zweitens hatte ich vor, S3-Unterstützung für Uploads in meiner Anwendung zu haben. Wenn ich eine yaml-Datei mit dem geheimen s3-Zugriffsschlüssel hinzufügen wollte, wie initialisiere ich sie in meiner Rails App und wie greife ich auf die Werte zu, die ich in dieser Konfigurationsdatei definiert habe?.

331
Shiv

Update 1

Sehr empfehlenswert: 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, markieren Sie Jack Pratts Antwort unten.

Obwohl meine ursprüngliche Antwort unten 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 das Ansehen der "YAML-Konfigurationsdatei" Bildschirmdarstellung von Ryan Bates sehr hilfreich sein.

In Summe:

# 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
163
khelll

In Rails 3 können anwendungsspezifische benutzerdefinierte Konfigurationsdaten im Anwendungskonfigurationsobjekt abgelegt werden. Die Konfiguration kann in den Initialisierungsdateien oder den Umgebungsdateien zugewiesen werden - beispielsweise 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 einzustellen:

Rails.configuration.custom_config_variable
=> :my_config_setting

UPDATE Rails 4

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

enter image description here

371
Jack Pratt

In Rails 3.0.5 hat der folgende Ansatz für mich funktioniert:

Im config/environments/development.rb, schreiben

config.custom_config_key = :config_value

Der Wert custom_config_key kann dann mit aus anderen Dateien referenziert werden

Rails.application.config.custom_config_key
68
Rob Dawson

Dies funktioniert in Rails 3.1:

in config/environment.rb (oder in config/surroundings/.., um auf eine bestimmte Umgebung abzuzielen):

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

Dies ist in Controllern oder Ansichten wie diesen möglich:

YourApp::Application.config.yourKey

(IhreApp sollte durch Ihren Anwendungsnamen ersetzt werden.)

Anmerkung: 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
30
Alain Beauvois

In Rails 4

Angenommen, Sie fügen Ihre benutzerdefinierten Variablen in eine Yaml-Datei ein:

# 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 App wie folgt auf diese Werte zugreifen:

Rails.configuration.acme.api_user

Es ist zweckmäßig, dass Rails.application.config_for :acme lädt dein acme.yml und verwenden Sie die richtige Umgebung.

28
pymkin

Seit Rails 4.2, ohne zusätzliche Edelsteine können Sie config/hi.yml laden einfach mit Rails.application.config_for :hi.

Zum Beispiel:

  1. touch config/passwords.yml

        #config/passwords.yml
        development:
          username: 'a'
          password: 'b'
        production:
          username: 'aa'
          password: 'bb'
    
  1. touch config/initializers/constants.rb

    #config/initializers/constants.rb
    AUTHENTICATION = Rails.application.config_for :passwords
    
  1. und jetzt können Sie AUTHENTICATION Konstante überall in Ihrer Anwendung verwenden:

    #Rails c production
    :001> AUTHENTICATION['username'] => 'aa'
    
  2. fügen Sie dann passwords.yml zu hinzu. gitignore : echo /config/passwords.yml >> .gitignore, erstellen Sie eine Beispieldatei für Ihren Komfort cp /config/passwords.yml /config/passwords.example.yml und dann bearbeiten Sie einfach Ihre Beispieldatei in Ihrer Produktionskonsole mit den tatsächlichen Produktionswerten.

19
lakesare

Ich wollte dies nur für die neuesten coolen Sachen in Rails 4.2, Sie können dies jetzt in jedem Ihrer config/**/*.rb Dateien:

config.x.whatever.you.want = 42

... und dies wird in Ihrer App verfügbar sein als:

Rails.configuration.x.whatever.you.want

Weitere Informationen finden Sie hier: http://guides.rubyonrails.org/configuring.html#custom-configuration

12
smathy

Schauen Sie sich genau das an: https://github.com/mislav/choices

Auf diese Weise werden Ihre sensiblen Daten in Open Source-Projekten nicht offengelegt

8
Flov

Ich habe ein einfaches Plugin für YAML-Einstellungen erstellt: Yettings

Es funktioniert ähnlich wie der Code in der Antwort von khelll, aber Sie müssen nur diese YAML-Konfigurationsdatei hinzufügen:

app/config/yetting.yml

Das Plugin erstellt dynamisch eine Klasse, mit der Sie wie folgt auf die YML-Einstellungen als Klassenmethoden in Ihrer App zugreifen können:

Yetting.your_setting

Wenn Sie mehrere Einstellungsdateien mit eindeutigen Namen verwenden möchten, können Sie diese in einem Unterverzeichnis in app/config wie folgt ablegen:

app/config/yettings/first.yml
app/config/yettings/second.yml

Dann können Sie folgendermaßen auf die Werte zugreifen:

FirstYetting.your_setting
SecondYetting.your_setting

Sie erhalten auch Standardeinstellungen, die pro Umgebung überschrieben werden können. Sie können erb auch in der yml-Datei verwenden.

4
johnmcaliley

Ich mag das settingslogic gem. Sehr einfach einzurichten und zu verwenden.

https://github.com/binarylogic/settingslogic

4
Rahil Sondhi

Wenn Sie Heroku verwenden oder auf andere Weise Ihre Anwendungseinstellungen als Umgebungsvariablen beibehalten müssen, ist der Edelstein figaro sehr hilfreich.

4
MikeH

Ich verwende gerne Rails-settings für globale Konfigurationswerte, die über das Webinterface geändert werden müssen.

2
cite

Wir beginnen mit der Arbeit mit dem ActiveSupport Ordered Hash

Damit können Sie Ihre Konfiguration sauber in den Umgebungsdateien definieren, z.

config.service = ActiveSupport::OrderedOptions.new
config.service.api_key = ENV['SERVICE_API_KEY']
config.service.shared_secret = ENV['SERVICE_SHARED_SECRET']
0
mdb29