Ricaricare automaticamente un'app Sails.js in caso di modifiche al codice?


107

Attualmente sembra che per qualsiasi modifica al codice in un'app sails.js sia necessario arrestare manualmente il server sails ed eseguirlo di sails liftnuovo prima di poter vedere le modifiche.

Mi chiedevo se esiste un modo durante l'esecuzione in modalità di sviluppo per riavviare automaticamente il server Sails quando rileva una modifica del codice?

Risposte:


74

Devi usare un watcher come forever , nodemon o qualcos'altro ...

Esempio

  1. Installa per sempre eseguendo:

    sudo npm install -g forever

  2. Eseguirlo:

    forever -w start app.js


Per evitare un riavvio infinito perché Sails scrive nella .tmpcartella, puoi creare un .foreverignorefile nella directory del tuo progetto e inserire questo contenuto all'interno:

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

Vedi il problema su GitHub: riavvio per sempre a causa di /.tmp .


7
Potresti anche voler aggiungere visualizzazioni in .foreverignorequanto non richiedono il riavvio per vedere le modifiche immediatamente. ad esempio**/views/**
Seth Malaki

ma sfortunatamente questi porteranno al codice di bootstrap eseguito di nuovo e alla perdita di sessioni.
rahulserver

1
Ho usato questo ma ricevo il seguente avviso: --minUptime non impostato. Impostazione predefinita: 1000 ms. Come imposto questa variabile?
Golinmarq

47

Puoi usare sails-hook-autoreload

Solleva l'app normalmente e quando aggiungi / modifichi / rimuovi un modello o un file di controller, tutti i controller ei modelli verranno ricaricati senza dover abbassare / rilanciare l'app.


1
Questa sembra essere la soluzione più semplice / facile. Installa npm e aggiungi l'esempio autoreload.js nella cartella config e il gioco è fatto.
Braintapper

1
Assolutamente fantastico. Il più semplice e il più nativo di Sails.
Alexus

Im ottenendo Details: Error: ER_ROW_IS_REFERENCED: Cannot delete or update a parent row: a foreign key constraint failbuttato da 5/lib/node_modules/sails/lib/hooks/orm/index.js:221quando salvo (utilizzando vele 11.3)
Gab

45

Ad esempio con nodemonper guardare api e directory di configurazione

.nodemonignore Contenuti

views/*
.tmp/*
.git/*

Esegui il comando dopo aver creato .nodemonignore

$> nodemon -w api -w config

Esempio per il supervisore per ignorare 3 directory

$> supervisor -i .tmp,.git,views app.js

4
Mi piace la nodemonsoluzione rispetto alla foreversoluzione dato il modo in cui le nodemonpipe tornano a stdout senza configurazione aggiuntiva. Semplifica il flusso di lavoro di sviluppo.
Aaron Ransley

Per il comando ho solo usato il tuo .nodemonignoreesempio ed eseguito nodemon. Finora funziona.
Michael J. Calkins,

Per chiunque altro sia confuso su come eseguire i lanci di cui sopra (l'equivalente di) sails lift, nodemon sa usare app.js.
Tyler Collier


8

installare nodemonglobalmente o localmente.

npm install nodemon --save
npm install nodemon -g

installare sailslocalmente nel progetto come segue

npm install sails --save

poi cambia package.json

a partire dal

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

per

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

poi

npm run dev

7

Ho avuto lo stesso problema e l'ho risolto usando grunt-watch e grunt-forever con le attività sails @ beta. Il risultato sono 4 comandi grugniti:

AGGIORNAMENTO: le attività sono disponibili nella versione attuale di vele (non è più beta:>)

  • inizio Avvia il server
  • stop Arresta il server
  • riavvia Riavvia il server
  • startWatch Avvia il server e attende le modifiche per riavviarlo (utilizzando grunt-watch). Questa è probabilmente la tua soluzione, ma anche gli altri comandi sono utili.

Ecco il codice: sto usando sails @ beta, che include una directory delle attività , non so se è inclusa nelle versioni precedenti:

  • Prima di tutto devi installare per sempre nella tua directory di vele:

    npm install grunt-forever --save-dev
  • task / config / forever.js Configura l'attività per sempre.

    module.exports = function(grunt) {
      grunt.config.set('forever', {
        server: {
           options: {
              index: 'app.js',
              logDir: 'logs'
           }
        }
      });
    
      grunt.loadNpmTasks('grunt-forever');
    };
  • task / config / watch.js ( modifica ) Modifica l'attività di controllo per aggiungere una nuova regola

    // api and assets default rules
    ,
    server: {
        // Server files to watch:
        files: [
            'api/**/*',
            'config/**/*'
        ],
    
        // Restart server
        tasks: ['forever:server:restart']
    }
  • task / register / watchForever.js Registra le tue attività personalizzate (questo file può essere rinominato come vuoi)

    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'
     ]);
    };

Con questo dovresti essere in grado di usare

    grunt startWatch

e fai in modo che il tuo server attenda il riavvio delle modifiche:>

Spero che questo abbia aiutato!


6

Meglio che tu usi

npm install -g nodemon

Lo sto usando e mi aiuterà a migliorare la mia velocità di sviluppo. non è necessario modificare alcun file per questo !.

dopo l'installazione

nodemon app.js

Nodemon è utile se vuoi riavviare il tuo server per ogni salvataggio. Ma se stai usando webstorm o qualsiasi ide con salvataggio automatico, riavvierà continuamente il tuo server.
Vishnu KR

Esattamente il signor Vishnu KR.
BINFAS K

1

Per chiunque arrivi a questa domanda ora, sembra che ciò non sia più necessario: un'applicazione avviata con sails liftavrà un'attività di controllo grugnito in esecuzione e le modifiche al codice saranno visibili senza riavvio.

All'inizio non mi ero reso conto che questo stesse accadendo perché non c'è nulla che indichi cosa sta succedendo nella console, ma sembra funzionare senza un riavvio (sto usando Sails 0.11)


8
Non penso che sia così, devo ancora riavviare le vele dopo aver cambiato qualsiasi controller
fengd

Devo anche riavviare l'app per vedere le mie modifiche.
user1007522
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.