¿Recargar automáticamente una aplicación Sails.js en cambios de código?


107

Actualmente, parece que para cualquier cambio de código en una aplicación sails.js, debe detener manualmente el servidor de sails y ejecutarlo sails liftnuevamente antes de que pueda ver los cambios.

Me preguntaba si hay alguna forma cuando se ejecuta en modo de desarrollo para reiniciar automáticamente el servidor de Sails cuando detecta un cambio de código.

Respuestas:


74

Tienes que usar un observador como forever , nodemon o algo más ...

Ejemplo

  1. Instalar para siempre ejecutando:

    sudo npm install -g forever

  2. Ejecutarlo:

    forever -w start app.js


Para evitar un reinicio infinito porque Sails escribe en la .tmpcarpeta, puede crear un .foreverignorearchivo en el directorio de su proyecto y poner este contenido dentro:

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

Consulte el problema en GitHub: Reinicio permanente debido a /.tmp .


7
Es posible que también desee agregar vistas, .foreverignoreya que no requieren reinicios para ver los cambios de inmediato. por ejemplo**/views/**
Seth Malaki

pero, desafortunadamente, esto conducirá a que el código de arranque se ejecute nuevamente y a la pérdida de sesiones.
rahulserver

1
Usé esto pero recibo la siguiente advertencia: --minUptime not set. Por defecto a: 1000ms. ¿Cómo configuro esta variable?
Golinmarq

47

Puedes usar sails-hook-autoreload

Simplemente levante su aplicación como de costumbre, y cuando agregue / cambie / elimine un modelo o archivo de controlador, todos los controladores y modelos se volverán a cargar sin tener que bajar / volver a levantar la aplicación.


1
Esta parece ser la solución más simple / fácil. Instale el npm y agregue el autoreload.js de muestra en la carpeta de configuración y básicamente habrá terminado.
Braintapper

1
Absolutamente increible. El más sencillo y nativo de Sails.
Alexus

Estoy siendo Details: Error: ER_ROW_IS_REFERENCED: Cannot delete or update a parent row: a foreign key constraint failabandonado 5/lib/node_modules/sails/lib/hooks/orm/index.js:221cuando guardo (usando velas 11.3)
Gab

45

Por ejemplo, nodemonpara ver directorios api y config

.nodemonignore contenido

views/*
.tmp/*
.git/*

Ejecute el comando después de crear .nodemonignore

$> nodemon -w api -w config

Ejemplo de supervisor para ignorar 3 directorios

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

4
Me gusta la nodemonsolución sobre la foreversolución dada la forma en que las nodemontuberías vuelven a la salida estándar sin configuración adicional. Facilita el flujo de trabajo de desarrollo.
Aaron Ransley

Para el comando, solo usé tu .nodemonignoreejemplo y ejecuté nodemon. Funciona hasta ahora.
Michael J. Calkins

Para cualquiera que esté confundido acerca de cómo ejecutar los lanzamientos anteriores (el equivalente de) sails lift, nodemon sabe usar app.js.
Tyler Collier


8

instalar nodemonglobal o localmente.

npm install nodemon --save
npm install nodemon -g

instalar sailslocalmente en su proyecto de la siguiente manera

npm install sails --save

entonces cambia package.json

de

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

a

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

luego

npm run dev

7

Tuve el mismo problema y lo resolví usando las tareas de grunt-watch y grunt-forever con sails @ beta. El resultado son 4 comandos gruñidos:

ACTUALIZACIÓN: las tareas están disponibles en la versión actual de velas (ya no es beta:>)

  • start Inicia el servidor
  • detener Detiene el servidor
  • reiniciar Reinicia el servidor
  • startWatch Inicia el servidor y espera cambios para reiniciarlo (usando grunt-watch). Esta es probablemente su solución, pero los otros comandos también son útiles.

Aquí está el código: estoy usando sails @ beta, que incluye un directorio de tareas , no sé si está incluido en versiones anteriores:

  • En primer lugar, debe instalar para siempre en su directorio de velas:

    npm install grunt-forever --save-dev
  • tasks / config / forever.js Configure la tarea para siempre.

    module.exports = function(grunt) {
      grunt.config.set('forever', {
        server: {
           options: {
              index: 'app.js',
              logDir: 'logs'
           }
        }
      });
    
      grunt.loadNpmTasks('grunt-forever');
    };
  • tasks / config / watch.js ( editar ) Edite la tarea de vigilancia para agregar una nueva regla

    // api and assets default rules
    ,
    server: {
        // Server files to watch:
        files: [
            'api/**/*',
            'config/**/*'
        ],
    
        // Restart server
        tasks: ['forever:server:restart']
    }
  • tasks / register / watchForever.js Registre sus tareas personalizadas (este archivo se puede renombrar como desee)

    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 esto deberías poder usar

    grunt startWatch

y haga que su servidor espere a que se reinicien los cambios:>

¡Espero que esto haya ayudado!


6

Mejor que uses

npm install -g nodemon

Estoy usando esto y me ayudará a mejorar mi velocidad de desarrollo. ¡no es necesario editar ningún archivo para este !.

Después de la instalación

nodemon app.js

Nodemon es bueno si desea reiniciar su servidor para cada guardado. Pero si está utilizando webstorm o cualquier ide con guardado automático, continuará reiniciando su servidor.
Vishnu KR

Exactamente el señor Visnu KR.
BINFAS K

1

Para cualquiera que llegue a esta pregunta ahora, parece que esto ya no es necesario: una aplicación iniciada con sails lifttendrá una tarea de vigilancia grunt ejecutándose y los cambios de código serán visibles sin reiniciar.

No me di cuenta de que esto estaba sucediendo al principio porque no hay nada que indique lo que está sucediendo en la consola, pero parece funcionar sin reiniciar (estoy usando Sails 0.11)


8
No creo que este sea el caso, todavía tengo que reiniciar las velas después de cambiar cualquier controlador
fengd

También necesito reiniciar la aplicación para ver mis cambios.
user1007522
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.