2013-10-24 29 views
5

Ich habe ein paar Apps auf Heroku. Alle verwenden GruntJS, um Assets zu erstellen und nach S3 zu verteilen. Eine App funktioniert seit geraumer Zeit gut.process.env enthält keine Konfigurationsvariablen auf Heroku

Die anderen Anwendungen haben ein Problem, wo ich meine Konfigurationsvariablen nicht aus der Gruntfile lesen kann. Als ich Heroku des toolbelt verwenden mein Setup zu sehen, ich sehe:

$ heroku config --app mydevapp --account personal 
=== mydevapp Config Vars 
AWS_ACCESS_KEY:   #########  
AWS_BUCKET:    ######### 
AWS_SECRET_KEY:   ######### 
BUILDPACK_URL:   https://github.com/ddollar/heroku-buildpack-multi.git 
DATABASE_URL:   ######### 
PAPERTRAIL_API_TOKEN: ######### 
TEST:     test 

Das ist sehr gut. Keine dieser Variablen steht mir jedoch von Grunt zur Verfügung. Als ich (process.env) console.log vom Gruntfile, ich sehe:

{ GEM_HOME: '/tmp/build_e26d1d60-d447-40d8-b09b-02d3758a6027/.gem/ruby/1.9.1', 
    SHELL: '/bin/bash', 
    SSH_CLIENT: '10.207.46.127 55868 50678', 
    GROUP: 'production', 
    DEPLOY: 'production', 
    STACK: 'cedar', 
    SHLVL: '3', 
    HOME: '/app', 
    CPPPATH: '/tmp/node-node-hP8q/include', 
    _: '/tmp/build_e26d1d60-d447-40d8-b09b-02d3758a6027/node_modules/grunt-cli/bin/grunt' 
} 

Es gibt einige andere Vars da drin sind, aber ich bin nicht sicher, was sicher ist, zu zeigen. Ich sehe KEIN meiner config vars aufgelistet.

Ich habe keine Ahnung, was der Unterschied zwischen meiner App und den beiden Apps, die keine config vars in der Variablen process.env haben.

Ich habe gelesen, dass mit Grunt auf diese Weise ist nicht wirklich die beste Idee, aber es ist, was wir eingerichtet haben. Natürlich könnte sich das ändern, wenn es nötig ist.

Irgendwelche Ideen? Gibt es etwas, das ich klären muss?

Antwort

7

Heroku stellt die Konfigurationsvariablen standardmäßig nicht auf Build.

heroku labs:enable user-env-compile -a myapp 

Text & Tabellen: Es Sie dies wollen, müssen Sie das user-env-compile Labor durch Ausgabe ermöglichen müssen https://devcenter.heroku.com/articles/labs-user-env-compile

+0

Und tatsächlich, es ist in meiner Arbeits-App aktiviert und ich habe diesen Schritt in den anderen völlig vergessen. Vielen Dank. – ryanday

+0

:-) Gern geschehen –

+0

Total vergessen. Du schaukelst. –

0

2017 Update:

Sein scheint, dass Sie das ENV_DIR Argument verwenden sollten.

zu doc ​​nach:

ENV_DIR ist ein Verzeichnis, das eine Datei für jede der Anwendung Konfigurationsvariablen enthält. Konfigurationsvariablen werden als Umgebungsvariablen während der Ausführung von Befehlen zur Verfügung gestellt, die in der Procfile-Datei sowie bei der Ausführung einmaliger Prozesse angegeben sind.

Überprüfen Sie den bin/compile Abschnitt für weitere Details

Hier ein Ausschnitt ist die Config Vars in der Aufbauphase zu extrahieren:

export_env_dir() { 
    env_dir=$1 
    whitelist_regex=${2:-''} 
    blacklist_regex=${3:-'^(PATH|GIT_DIR|CPATH|CPPATH|LD_PRELOAD|LIBRARY_PATH)$'} 
    if [ -d "$env_dir" ]; then 
    for e in $(ls $env_dir); do 
     echo "$e" | grep -E "$whitelist_regex" | grep -qvE "$blacklist_regex" && 
     export "$e=$(cat $env_dir/$e)" 
     : 
    done 
    fi 
} 

Für mich seine scheint ein Übermaß - gerne Ihre Meinung hören .

Verwandte Themen