2016-04-29 46 views
5

Sul mio computer locale, voglio impostare le variabili di ambiente per tutte le informazioni sensibili nel file database.yml. Il mio file è simile al seguente:Come impostare le variabili d'ambiente delle rotaie nel file database.yml?

default: &default 
    adapter: mysql2 
    encoding: utf8 
    pool: 5 
    username: <%= ENV['DATABASE_USERNAME'] %> 
    password: <%= ENV['DATABASE_PASSWORD'] %> 
    socket: <%= ENV['SOCKET'] %> 

development: 
    <<: *default 
    database: <%= ENV['DEVELOPMENT_DATABASE'] %> 

test: 
    <<: *default 
    database: #JetStreamIQ-2_0_test 

production: 
    <<: *default 
    database: <%= ENV['PRODUCTION_DATABASE'] %> 
    username: <%= ENV['DATABASE_USERNAME'] %> 
    password: <%= ENV['DATABASE_PASSWORD'] %> 

ho pensato che ho potuto solo impostare queste variabili di ambiente nel mio file .bashrc, ma questo non sembra funzionare. Il mio file .bashrc si presenta così:

export DATABASE_USERNAME="root" 
export DATABASE_PASSWORD="*****" 
export SOCKET="/var/run/mysqld/mysqld.sock" 
export DEVELOPMENT_DATABASE="shoppe_development" 
export PRODUCTION_DATABASE="#" 

Quando eseguo il mio server con

rails s 

ottengo un errore che dice:

Access denied for user 'root'@'localhost' (using password: YES) 

Capisco che c'è un problema con la il nome utente e la password del database a causa del modo in cui ho configurato il mio file database.yml, ma non sono sicuro di cosa sia.

C'è qualcosa di grande che mi manca qui? Qualsiasi aiuto sarebbe molto apprezzato.

Grazie!

risposta

1

Si tratta di un errore di battitura o si sta davvero impostando JETSTREAMIQ_DATABASE_PASSWORD ma utilizzando DATABASE_PASSWORD nel proprio database.yml? Perché questo lo farebbe.

È possibile connettersi a mysql utilizzando i valori effettivi direttamente utilizzando l'app da riga di comando mysql?

+0

No, quello era un refuso; mi dispiace, ho appena modificato il mio post. Sì, posso collegarmi con i valori nel mio file bashrc se li inserisco semplicemente usando la riga di comando mysql. – Mark

11

Mi piacerebbe offrire un paio di suggerimenti qui.

  1. È possibile eseguire database.yml tramite erb per verificare ciò che si sta ottenendo. Ad esempio, erb config/database.yml. Questo ti aiuterà a determinare quale potrebbe essere il problema.

  2. È possibile trovare tutte le variabili di ambiente impostate nella shell con il comando set. Ciò ti consentirà di confermare che le variabili di ambiente che ti aspetti siano impostate (in .bashrc).

Spero che questo sia utile.

+2

Questo è un bel trucco con il comando 'erb config/database.yml'. Non sapevo che potessi farlo. Quando ho eseguito quel comando, mostra che tutti i campi in cui ho definito le variabili di ambiente sono vuoti. – Mark

2

Si scopre che dopo aver modificato il file bashrc, ho dovuto uscire da quella sessione del terminale e aprire un altro terminale per le modifiche da finalizzare:/Dopo averlo fatto, la mia applicazione è iniziata perfettamente.

+1

Hai ragione - '.bashrc' viene caricato solo quando accedi, quindi iniziare una nuova sessione di terminale è un modo per vedere le tue modifiche. In alternativa si potrebbe fare '. .bashrc' per caricare il file senza riavviare la sessione. – Brian

+0

Oh bello, grazie per il suggerimento! – Mark

0

Se non volete riavviare il terminale, basta eseguire il file .bashrc:

source /path/to/.bashrc 

nello stesso terminale come server rotaie.