ruby-on-rails - what - software ruby on rails




Come definire le variabili di configurazione personalizzate nelle rotaie (10)

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.


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.


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 dinamicamente una classe che ti consente di accedere alle impostazioni YML come metodi di classe nella tua app in questo modo:

Yetting.your_setting

Inoltre, se si desidera utilizzare più file di impostazioni con nomi univoci, è possibile 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.


In Rails 3, i dati di configurazione personalizzati specifici dell'applicazione possono essere inseriti nell'oggetto 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



Mi piace utilizzare le rails-settings delle rails-settings per i valori di configurazione globali che devono essere modificabili tramite l'interfaccia web.


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


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


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

Poiché Rails 4.2, senza gemme aggiuntive, è possibile 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.





configuration