Automatyczne ponowne ładowanie aplikacji Sails.js po zmianie kodu?

107

Obecnie wydaje się, że każda zmiana kodu w aplikacji sails.js wymaga ręcznego zatrzymania serwera sails i sails liftponownego uruchomienia, zanim będzie można zobaczyć zmiany.

Zastanawiałem się, czy podczas pracy w trybie programistycznym istnieje sposób, aby automatycznie ponownie uruchomić serwer żagli, gdy wykryje zmianę kodu?

subblue
źródło

Odpowiedzi:

74

Musisz użyć obserwatora jak na zawsze , nodemona lub czegoś innego ...

Przykład

  1. Zainstaluj na zawsze , uruchamiając:

    sudo npm install -g forever

  2. Uruchom:

    forever -w start app.js


Aby uniknąć nieskończonego restartu, ponieważ Sails zapisuje w .tmpfolderze, możesz utworzyć .foreverignoreplik w katalogu projektu i umieścić w nim tę zawartość:

**/.tmp/**
**/views/**
**/assets/**

Zobacz problem na GitHub: wieczne ponowne uruchamianie z powodu /.tmp .

Sandro Munda
źródło
7
Możesz także chcieć dodać widoki do, .foreverignoreponieważ nie wymagają one ponownego uruchamiania, aby natychmiast zobaczyć zmiany. np.**/views/**
Seth Malaki
ale niestety doprowadzi to do ponownego wykonania kodu bootstrap i utraty sesji.
rahulserver
1
Użyłem tego, ale otrzymuję następujące ostrzeżenie: --minUptime not set. Domyślnie: 1000 ms. Jak ustawić tę zmienną?
Golinmarq
47

Możesz użyć sails-hook-autoreload

Po prostu podnieś aplikację w normalny sposób, a po dodaniu / zmianie / usunięciu modelu lub pliku kontrolera wszystkie kontrolery i modele zostaną ponownie załadowane bez konieczności opuszczania / ponownego podnoszenia aplikacji.

Vitalii Maslianok
źródło
1
Wydaje się, że jest to najprostsze / najłatwiejsze rozwiązanie. Zainstaluj npm i dodaj przykładowy autoreload.js do folderu config i gotowe.
Braintapper
1
Absolutnie wspaniałe. Najprostszy i najbardziej natywny dla Sails.
Alexus
Zostaję Details: Error: ER_ROW_IS_REFERENCED: Cannot delete or update a parent row: a foreign key constraint failrzucony, 5/lib/node_modules/sails/lib/hooks/orm/index.js:221kiedy oszczędzam (używając żagli 11.3)
Gab
45

Na przykład nodemondo oglądania katalogów api i config

.nodemonignore zawartość

views/*
.tmp/*
.git/*

Uruchom polecenie po utworzeniu pliku .nodemonignore

$> nodemon -w api -w config

Przykład dla przełożonego, aby zignorować 3 katalogi

$> supervisor -i .tmp,.git,views app.js
woss
źródło
4
nodemonRozwiązanie podoba mi się bardziej niż foreverrozwiązanie, biorąc pod uwagę, jak nodemonrury wychodzą z powrotem do standardowego wyjścia bez dodatkowej konfiguracji. Ułatwia pracę programistyczną.
Aaron Ransley,
W przypadku polecenia właśnie użyłem twojego .nodemonignoreprzykładu i uruchomiłem nodemon. Jak dotąd to działa.
Michael J. Calkins,
Dla każdego, kto nie wie, w jaki sposób uruchomić powyższe uruchomienia (odpowiednik) sails lift, nodemon wie, jak używać app.js.
Tyler Collier
9

Jeśli używasz Sails 0.11, możesz zainstalować ten hak, aby automatycznie przeładowywać po zmianie modeli lub kontrolerów (widoki nie wymagają przeładowywania):

npm install sails-hook-autoreload

https://www.npmjs.com/package/sails-hook-autoreload

Ben Fried
źródło
1
Wspomniała o tym już wcześniejsza odpowiedź Vitalii Maslianoka.
Tyler Collier
8

zainstalować nodemonglobalnie lub lokalnie.

npm install nodemon --save
npm install nodemon -g

zainstaluj sailslokalnie w swoim projekcie w następujący sposób

npm install sails --save

następnie zmień package.json

z

"scripts": {
  "debug": "node debug app.js",
  "start": "node app.js"
},

do

"scripts": {
   "debug": "node debug app.js",
   "start": "node app.js",
   "dev": "export NODE_ENV=development && nodemon --ignore 'tmp/*' app.js && exit 0"
},

następnie

npm run dev
Mujtaba Kably
źródło
7

Miałem ten sam problem i rozwiązałem go za pomocą grunt-watch i grunt-forever z zadaniami żagle @ beta. Rezultatem są 4 polecenia gruntowne:

AKTUALIZACJA: zadania są dostępne w aktualnej wersji żagli (nie jest to już beta:>)

  • start Uruchamia serwer
  • stop Zatrzymuje serwer
  • restart Restartuje serwer
  • startWatch Uruchamia serwer i czeka na zmiany, aby go zrestartować (używając grunt-watch). To prawdopodobnie twoje rozwiązanie, ale inne polecenia również są przydatne.

Oto kod - używam sails @ beta, który zawiera katalog zadań , nie wiem, czy jest to zawarte w poprzednich wersjach:

  • Przede wszystkim musisz zainstalować na zawsze w swoim katalogu żagli:

    npm install grunt-forever --save-dev
  • task / config / forever.js Konfiguruj zadanie na zawsze.

    module.exports = function(grunt) {
      grunt.config.set('forever', {
        server: {
           options: {
              index: 'app.js',
              logDir: 'logs'
           }
        }
      });
    
      grunt.loadNpmTasks('grunt-forever');
    };
    
  • Tasks / config / watch.js ( edytuj ) Edytuj zadanie obserwatora, aby dodać nową regułę

    // api and assets default rules
    ,
    server: {
        // Server files to watch:
        files: [
            'api/**/*',
            'config/**/*'
        ],
    
        // Restart server
        tasks: ['forever:server:restart']
    }
    
  • Tasks / register / watchForever.js Zarejestruj swoje własne zadania (nazwa tego pliku może zostać zmieniona na dowolną)

    module.exports = function(grunt) {
    // Starts server
      grunt.registerTask('start', [
        'compileAssets',
        'linkAssetsBuild',
        'clean:build',
        'copy:build',
        'forever:server:start'
      ]);
    
      // Restarts the server (if necessary) and waits for changes
      grunt.registerTask('startWatch', [
        'restart',
        'watch:server'
      ]);
    
      // Restarts server
      grunt.registerTask('restart', [
        'forever:server:restart'
      ]);
    
      // Stops server
      grunt.registerTask('stop', [
        'forever:server:stop'
     ]);
    };
    

Dzięki temu powinieneś być w stanie użyć

    grunt startWatch

i pozwól serwerowi czekać na ponowne uruchomienie zmian:>

Mam nadzieję, że to pomogło!

josec89
źródło
6

Lepiej używasz

npm install -g nodemon

używam tego i pomoże mi to poprawić szybkość rozwoju. nie ma potrzeby edytowania żadnych plików dla tego !.

po instalacji

nodemon app.js
BINFAS K
źródło
Nodemon jest dobry, jeśli chcesz restartować serwer po każdym zapisie. Ale jeśli korzystasz z burzy internetowej lub dowolnego IDE z automatycznym zapisem, będzie kontynuował restart serwera.
Wisznu KR
Dokładnie pan Vishnu KR.
BINFAS K
1

Dla każdego, kto teraz zadaje to pytanie, wydaje się, że nie jest to już konieczne - aplikacja uruchomiona za pomocą sails liftbędzie miała uruchomione zadanie podglądu gruntownego, a zmiany kodu będą widoczne bez ponownego uruchamiania.

Na początku nie zdawałem sobie sprawy, że to się dzieje, ponieważ nic nie wskazuje na to, co dzieje się w konsoli, ale wydaje się, że działa bez restartu (używam Sails 0.11)

Nick F.
źródło
8
Myślę, że tak nie jest, po zmianie dowolnego kontrolera nadal muszę ponownie uruchomić żagle
fengd
Muszę również ponownie uruchomić aplikację, aby zobaczyć moje zmiany.
user1007522