2012-02-03 13 views
21

Aplikacja internetowa, którą piszę w JavaScript za pomocą node.js. Używam Foreman, ale nie chcę ręcznie restartować serwera za każdym razem, gdy zmieniam kod. Czy mogę powiedzieć Foremanowi, aby ponownie załadował całą aplikację internetową przed obsługą żądania HTTP (tj. Ponownie uruchomić proces node)?Czy mogę powiedzieć kierownikowi, aby ponownie ładował aplikację internetową za każdym razem, gdy zostanie wysłane żądanie, aby mógł się przyzwoicie rozwijać?

Odpowiedz

23

Oto skorygowana wersja rozwiązania Pendlepants. Foreman szuka pliku .env, aby odczytać zmienne środowiskowe. Zamiast dodawania opakowanie, można po prostu przełączyć się Foreman co dowodzić używa zacząć rzeczy:

W .env:

WEB=node app.js 

W dev.env:

WEB=supervisor app.js 

w twojej Procfile:

web: $WEB 

domyślnie Foreman będzie czytać z .env (w produkcji), ale w DEV wystarczy uruchomić to:

+4

To nie działało dla mnie na Heroku - plik '.env' nigdy nie został załadowany. Utworzono osobny plik Procfile: http://stackoverflow.com/questions/10560241/how-to-use-nodemon-with-env-files –

3

Problem nie dotyczy Foremana, ponieważ dotyczy sposobu, w jaki węzeł nie przeładowuje kodu na nowe żądania. Rozwiązaniem jest użycie pakietu npm takiego jak supervisor wraz z opakowaniem środowiska Foreman.

Najpierw należy zainstalować promotor:

npm install -g supervisor 

Następnie napisać skrypt otoki powłoki że Foreman mogą dzwonić:

if [ "$NODE_ENV" == "production" ]; then 
    node /path/to/app.js 
else 
    supervisor /path/to/app.js 
fi 

Ustawianie uprawnień Skrypt do pliku wykonywalnego, uruchamiając chmod a+x /path/to/wrapper_script.sh

Wreszcie , zaktualizuj majstra, aby użyć skryptu opakowania. Więc w Procfile:

web: /path/to/wrapper_script.sh 

Teraz po uruchomieniu Foreman i aplikacja węzeł nie jest uruchomiony w produkcji, należy przeładować na każde żądanie.

7

Można użyć rerun do tego celu

Można wdrożyć tylko 2 komendy do tego:

  1. gem install powtórka
  2. powtórka majster rozpocząć

następnie ponownie zostanie automatycznie ponownie uruchomiony przetwarzać po każdej zmianie w swoich plikach.

+0

nie Mogłoby to być powolny, całkowicie restarcie wszystko w procfile na każdej zmianie pliku? –

+0

Obecnie używam [opiekuna] (https://github.com/isaacs/node-supervisor) do tego, to nie jest wielka sprawa, aby ponownie uruchomić aplikację przy każdej aktualizacji pliku. Jest to bardzo wygodne. –

0

Nie musisz nawet instalować niczego nowego, jeśli używasz node-dev.

Twoja.Plik env ładowane od Procfile:

NODECMD=node-dev 

Twój Procfile:

web: $NODECMD app/server.js 

Twój majster komenda

foreman start -e dev.env -p 9786 

I w env produkcyjnej (Heroku) ustawić zmienną środowiskową:

NODECMD=node 
6

Jeśli ty używać nodemon można zrobić

nodemon --exec "foreman start" 
+0

Ta metoda działa dobrze dla mnie. –

+0

Próbowałem tego, ale utknęło w "[nodemon] czystym wyjściu - czekając na zmiany przed restartem", serwer nie uruchamia się ponownie –

Powiązane problemy