Come definire le variabili di configurazione personalizzate nelle rotaie

Mi chiedevo come aggiungere variabili di configurazione personalizzate a un’applicazione di rails e come accedervi nel controller, per esempio vorrei essere in grado di definire una directory_del caricamento nei file di configurazione say development.rb ed essere in grado di accedervi in ​​uno dei miei controllori.

In secondo luogo stavo progettando di avere il supporto S3 per i caricamenti nella mia applicazione, se volessi aggiungere un file yaml con l’accesso s3, la chiave segreta, come inizializzarlo nella mia App per Rails e come accedere ai valori che ho definito in quel file di configurazione.

Aggiornamento 1

Molto consigliato: vado con Rails Config gioiello al giorno d’oggi per il controllo a grana fine che fornisce.

Update2

Se vuoi una soluzione rapida, controlla la risposta di Jack Pratt qui sotto.

Sebbene la mia risposta originale qui sotto funzioni ancora, questa risposta è ormai superata. Consiglio di guardare gli aggiornamenti 1 e 2.

Risposta originale:

Per una soluzione rapida, guardare la schermata “File di configurazione YAML” di Ryan Bates dovrebbe essere molto utile.

In sintesi:

# 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 

In Rails 3, i dati di configurazione personalizzati specifici dell’applicazione possono essere inseriti nell’object di configurazione dell’applicazione. La configurazione può essere assegnata nei file di inizializzazione o nei file di ambiente, ad esempio per una determinata applicazione MyApp :

 MyApp::Application.config.custom_config_variable = :my_config_setting 

o

 Rails.configuration.custom_config_variable = :my_config_setting 

Per leggere l’impostazione, chiama semplicemente la variabile di configurazione senza impostarla:

 Rails.configuration.custom_config_variable => :my_config_setting 

AGGIORNA Rails 4

In Rails 4 c’è un nuovo modo per questo => http://guides.rubyonrails.org/configuring.html#custom-configuration

inserisci la descrizione dell'immagine qui

In Rails 3.0.5, il seguente approccio ha funzionato per me:

In config/environments/development.rb , scrivi

 config.custom_config_key = :config_value 

Il valore custom_config_key può quindi essere referenziato da altri file usando

 Rails.application.config.custom_config_key 

Funziona su binari 3.1:

in config / environment.rb (o in config / environments / .. per indirizzare un ambiente specifico):

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

Questo sarà accessibile in controller o visualizzazioni come questa:

 YourApp::Application.config.yourKey 

(YourApp deve essere sostituito dal nome dell’applicazione.)

Nota : è il codice Ruby, quindi se hai un sacco di chiavi di configurazione, puoi farlo:

in config / environment.rb:

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

In Rails 4

Supponendo che tu inserisca le tue variabili personalizzate in un file yaml:

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

Crea un inizializzatore per caricarli:

 # 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 

Ora ovunque nella tua app puoi accedere a questi valori in questo modo:

 Rails.configuration.acme.api_user 

È conveniente che Rails.application.config_for :acme carichi il tuo acme.yml e utilizzi l’ambiente corretto.

Poiché Rails 4.2, senza gemme aggiuntive, è ansible caricare config / hi.yml semplicemente usando Rails.application.config_for :hi .

Per esempio:

  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. e ora puoi utilizzare la costante AUTHENTICATION ovunque nella tua applicazione:

     #rails c production :001> AUTHENTICATION['username'] => 'aa' 
  2. quindi aggiungi passwords.yml a .gitignore : echo /config/passwords.yml >> .gitignore , crea un file di esempio per il tuo comfort cp /config/passwords.yml /config/passwords.example.yml e poi modifica il tuo file di esempio nella console di produzione con valori di produzione effettivi.

Volevo solo aggiornarlo per le ultime novità in Rails 4.2, ora puoi farlo all’interno di uno qualsiasi dei tuoi file config/**/*.rb :

 config.x.whatever.you.want = 42 

… e questo sarà disponibile nella tua app come:

 Rails.configuration.x.whatever.you.want 

Vedi di più qui: http://guides.rubyonrails.org/configuring.html#custom-configuration

Dai un’occhiata a questo gioiello che fa esattamente questo: https://github.com/mislav/choices

In questo modo i tuoi dati sensibili non saranno esposti in progetti open source

Ho creato un semplice plug-in per le impostazioni YAML: Yettings

Funziona in modo simile al codice nella risposta di khelll, ma è sufficiente aggiungere questo file di configurazione YAML:

 app/config/yetting.yml 

Il plugin crea dynamicmente una class che ti consente di accedere alle impostazioni YML come metodi di class nella tua app in questo modo:

 Yetting.your_setting 

Inoltre, se si desidera utilizzare più file di impostazioni con nomi univoci, è ansible inserirli in una sottodirectory all’interno di app / config in questo modo:

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

Quindi puoi accedere ai valori come questo:

 FirstYetting.your_setting SecondYetting.your_setting 

Fornisce anche le impostazioni predefinite che possono essere sostituite per ambiente. Puoi anche usare erb all’interno del file yml.

Mi piace molto la gem settingslogic . Molto facile da configurare e utilizzare.

https://github.com/binarylogic/settingslogic

Se usi Heroku o altrimenti hai bisogno di mantenere le impostazioni dell’applicazione come variabili d’ambiente, la gem figaro è molto utile.

Mi piace utilizzare le impostazioni delle guide per i valori di configurazione globali che devono essere modificabili tramite l’interfaccia web.

Qualcosa che abbiamo iniziato a fare al lavoro è l’ hash ordinato di ActiveSupport

Che ti permette di definire la tua configurazione in modo pulito all’interno dei file dell’ambiente es

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

Suggerirei un buon approccio su come gestire la configurazione nella vostra applicazione. Ci sono tre regole base:

  • cambia la tua configurazione non un codice;
  • utilizzare le configurazioni oltre le condizioni;
  • scrivi codice che significa qualcosa.

Per avere una panoramica più dettagliata segui questo link: configurazione di Rails nel modo corretto