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?

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 .


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.


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

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


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

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!


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

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)


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.