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
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:
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.
Można użyć rerun do tego celu
Można wdrożyć tylko 2 komendy do tego:
- gem install powtórka
- powtórka majster rozpocząć
następnie ponownie zostanie automatycznie ponownie uruchomiony przetwarzać po każdej zmianie w swoich plikach.
nie Mogłoby to być powolny, całkowicie restarcie wszystko w procfile na każdej zmianie pliku? –
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. –
Mam wrażenie, że komentarz Petera Ehrlicha dotyczący pierwotnego pytania zasługuje na osobną odpowiedź. Myślę, że inny Procfile dla lokalnego/dev jest zdecydowanie najlepszym rozwiązaniem: https://stackoverflow.com/a/10790514/133720
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
Jeśli ty używać nodemon można zrobić
nodemon --exec "foreman start"
Ta metoda działa dobrze dla mnie. –
Próbowałem tego, ale utknęło w "[nodemon] czystym wyjściu - czekając na zmiany przed restartem", serwer nie uruchamia się ponownie –
- 1. SLF4J, Aby uniknąć zapisu LoggerFactory.getLogger (MyClassName.class) za każdym razem
- 2. Xamarin, Android. Za każdym razem, gdy uruchomię aplikację na urządzeniu, aplikacja zostanie zunifikowana, a następnie zainstalowana ponownie.
- 3. Chcesz, aby procmail uruchamiał niestandardowy skrypt python, za każdym razem, gdy pojawia się nowa poczta
- 4. Jak mogę zobaczyć rzeczywiste surowe żądanie, które zostanie wysłane
- 5. FullGC dzieje się za każdym razem, gdy działa CMS
- 6. Czy mogę napisać do logu konsoli, aby debugować aplikację internetową za pomocą C#
- 7. Dlaczego muszę przepłukiwać pulę połączeń za każdym razem, gdy ponownie się rozmierzę?
- 8. Zobacz kontroler pochodzenie zmienia się za każdym razem, gdy przedstawił
- 9. Jak mogę utworzyć użytkownika i bazę danych Postgres za każdym razem, gdy tworzę nową aplikację szyn?
- 10. Czy muszę "git dodawać" plik za każdym razem, gdy zostanie zatwierdzony?
- 11. Czy MEF eksportuje się do pamięci podręcznej lub odkrywa za każdym razem na żądanie?
- 12. Czy Railsy ponownie kompilują cały widok erb/haml za każdym razem, gdy trafi on w produkcję?
- 13. requestAccessToEntityType - raz lub za każdym razem?
- 14. JavaScript, aby ponownie załadować stronę jako żądanie GET
- 15. Dlaczego Travis CI pobiera wszystko za każdym razem, gdy buduje?
- 16. Czy gdb może drukować określoną zmienną za każdym razem, gdy się zepsuje?
- 17. iOS pobiera zrzut ekranu aplikacji za każdym razem, gdy jest wysyłany na serwer - w jaki sposób mogę zabezpieczyć moją aplikację?
- 18. Aby ponownie wyświetlić stronę internetową, program Internet Explorer musi ponownie wysłać
- 19. Zmiana ustawień narodowych: Wymuś aktywność, aby ponownie załadować zasoby?
- 20. Jak mogę uzyskać "def", aby nie ładować ponownie w clojure?
- 21. Czy mogę uniknąć Java EE, aby utworzyć lekką stronę internetową?
- 22. Niewłaściwe widoki za każdym razem, gdy otwieram scenorys
- 23. JSON.stringify ucieka podwójne cytaty za każdym razem, gdy stringified
- 24. glVertexAttribPointer potrzebny za każdym razem, gdy wywoływany jest glBindBuffer?
- 25. Muszę ponownie uruchomić Apache za każdym razem, gdy zmieniam kod Railsowy
- 26. Pulsuj szablon za każdym razem, gdy jest renderowany w Meteoru
- 27. Czy mogę powiedzieć Inno Setup * not *, aby utworzyć pliki unins000?
- 28. dlaczego cykl setInterval() staje się szybszy za każdym razem?
- 29. Powracaj różne wartości za każdym razem, gdy oczekiwane jest jMockit
- 30. Projekt biblioteki Xcode 7.3 kompiluje się za każdym razem
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 –