2012-05-29 15 views
8

Sono su Ubuntu 12.04 e sto solo imparando a conoscere le variabili di ambiente. Sto cercando di leggere una variabile personalizzata dalla mia applicazione ma si presenta sempre come undefined. Ecco il codice del mio test app:Impossibile leggere la mia variabile di ambiente nella mia app nodejs

// app.js 

console.log('Value: ' + process.env.NODE_ENV); 

Se corro i seguenti comandi si vedrà che la variabile ha un valore:

$ NODE_ENV=production 
$ echo $NODE_ENV 
production 

posso echo $NODE_ENV tutto il giorno e continuerà a mostrare io "produzione", ma quando faccio il process.env.NODE_ENV nella mia applicazione di nodo mostra sempre "non definito".

$ node app.js 
Value: undefined 

qui è la parte strana, però, se visualizzo un'altra variabile d'ambiente che conosco già esiste, dire process.env.PATH, allora funziona.

$ node app.js 
Value: /usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games 

Un altro aspetto fastidioso è che il comando printenv list non sembra contenere la mia variabile personalizzata NODE_ENV nonostante il fatto che echo $NODE_ENV mi mostra il valore corretto. printenv NODE_ENV non mostra nulla, ma printenv PATH mostra il valore corretto proprio come quando ho avuto accesso a PATH nella mia applicazione di nodo.

Qualsiasi aiuto è molto apprezzato.

risposta

20

È necessario export variabili di shell per renderle disponibili per i processi eseguiti nella shell.

confrontare l'output di questo comando:

FOO=bar; bash -c 'echo $FOO' 

con l'uscita di questo:

export FOO=bar; bash -c 'echo $FOO' 
0

Si potrebbe voler considerare l'utilizzo di una libreria per la gestione della configurazione app.

Per esempio nconf aiuta a gestire la configurazione attraverso

  • argumets riga di comando
  • variabili d'ambiente
  • file
  • ecc ..

e guardando la sorgente è un bel modo di imparare https://github.com/flatiron/nconf

5

Ho trovato la mia strada da qualcosa di veramente stupido.

Avevo appena aggiunto le nuove variabili esportate, ma il mio processo nodo non le vedeva ancora. Poi mi sono reso conto che non era sufficiente riavviare il processo del nodo: ho dovuto aprire anche un nuovo terminale (es. Istanza di bash). Una volta che ho fatto questo, ha funzionato bene :)

Problemi correlati