2011-08-11 8 views
26

mam demona pracuje dobrze z tymi instrukcjami: http://kevin.vanzonneveld.net/techblog/article/run_nodejs_as_a_service_on_ubuntu_karmic/ustawienie NODE_ENV dla node.js + expressjs aplikację jako demon pod Ubuntu

ale ponieważ ta uruchamia aplikację w trybie rozwoju, plik dziennika dostaje spam z gniazdem .io dzienniki debugowania.

Próbowałem ustawić NODE_ENV na produkcję w pliku upstart-conf, ale nie udało się.

script 
    export HOME="/root" 
    export NODE_ENV=production 

    exec /usr/local/bin/node /where/yourprogram.js >> /var/log/node.log 2>&1 
end script 

nie działa.

Odpowiedz

26

Spróbuj

exec NODE_ENV=production /usr/local/bin/node /where/yourprogram.js >> /var/log/node.log 2>&1 

W mojej konfiguracji mam sudoing jako mniejsze użytkownika, dlatego

exec sudo -u some-user NODE_ENV=production /usr/local/bin/node /where/yourprogram.js >> /var/log/node.log 2>&1 

, a ponieważ odradza się innym użytkownikom, prawdopodobnie ma inne środowisko. Jestem tutaj początkującym, ale to działa dla mnie.

+1

Pierwsza opcja nie działa i generuje następujący błąd: '/ proc/self/fd/9: 3: exec: NODE_ENV = production: not found' – kontinuity

+0

Może to być spowodowane tym, że polegam na składni bash. Sprawdź, której powłoki używasz i odpowiednio popraw komendę. – Yuval

+3

To co pracował dla mnie w końcu 'script eksport NODE_ENV = produkcja exec/usr/bin/node /someapp/server.js >> /var/log/someapp.log 2> & 1 koniec script' – kontinuity

14

Jeśli używasz node.js w produkcji, polecam użyć forever.js do daemonize program https://github.com/nodejitsu/forever

zainstalować używając KMP: [sudo] npm install forever -g

export NODE_ENV=production i uruchomić forever start app.js Można również określić, gdzie wstawiaj błędy i logi standardowe.

+1

dzięki. sprawdzi to. – pkyeck

+0

Aby uzyskać coś bardziej zaawansowanego, możesz również sprawdzić: https://github.com/learnboost/cluster – TiansHUo

+0

Aby wyjaśnić na ostatnim komentarzu @TiansHUo, Cluster nie rozwiązuje problemu "keep it running", jak Upstart with Respawn, Upstart + Monit, lub Forever. –

18

Oto prostszy skrypt, który można wykorzystać. Upstart obsługuje teraz wszystko, co musisz zrobić bezpośrednio, bez sekcji skryptów lub zbyt dużej osadzonej składni powłoki. Obejmuje to zmienne środowiskowe (env), katalog (chdir) użytkownik/grupa (setuid, setgid), Log magazynowe (console log) pracuje itd Pliki dziennika będą obsługiwane i obrócony do /var/log/upstart/your_app.log

description "start and stop the example express.js/node.js server" 
author "John Doe <[email protected]>" 

start on filesystem and started networking 
respawn 
console log 
chdir /opt/your_app 
setuid your_app_user 
setgid your_app_user 
env PATH=./node_modules/.bin:./node/bin:/usr/bin 
env NODE_ENV=production 
exec app/server.js 
+0

spróbuję tego. dziękuję – pkyeck

4

ustawić NODE_ENV w użyciu Heroku:

heroku config:set NODE_ENV="production" 
1

Ubuntu/Upstart są wymienione w pytaniu, ale mam tutaj szukając odpowiedzi dla kadłubów demon FreeBSD/systemu.

Linia poniżej rozpoczął aplikację w „rozwój” środowiska:

exec node path/to/start/script.js 

Linia poniżej rozpoczął aplikację w „produkcji” środowiska:

NODE_ENV=production exec node path/to/start/script.js 

Zajęło mi trochę czasu, aby dowiedzieć się tego się, więc pomyślałem, że się podzielę.