Rechargement automatique d'une application Sails.js lors des changements de code?


107

Il semble actuellement que pour tout changement de code dans une application sails.js, vous devez arrêter manuellement le serveur de voiles et le relancer sails liftavant de pouvoir voir les modifications.

Je me demandais s'il y avait un moyen lors de l'exécution en mode développement de redémarrer automatiquement le serveur de voiles lorsqu'il détecte un changement de code?

Réponses:


74

Vous devez utiliser un observateur comme forever , nodemon ou autre chose ...

Exemple

  1. Installez pour toujours en exécutant:

    sudo npm install -g forever

  2. Exécuter:

    forever -w start app.js


Pour éviter un redémarrage infini car Sails écrit dans le .tmpdossier, vous pouvez créer un .foreverignorefichier dans le répertoire de votre projet et placer ce contenu à l'intérieur:

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

Consultez le problème sur GitHub: redémarrage permanent à cause de /.tmp .


7
Vous pouvez également ajouter des vues .foreverignorecar elles ne nécessitent pas de redémarrage pour voir les modifications immédiatement. eg**/views/**
Seth Malaki

mais malheureusement, cela entraînera une nouvelle exécution du code bootstrap et la perte de sessions.
rahulserver

1
J'ai utilisé ceci mais je reçois l'avertissement suivant: --minUptime non défini. Valeur par défaut: 1000 ms. Comment définir cette variable?
Golinmarq

47

Vous pouvez utiliser les voiles-crochet-autoreload

Soulevez simplement votre application comme d'habitude, et lorsque vous ajoutez / modifiez / supprimez un modèle ou un fichier de contrôleur, tous les contrôleurs et modèles seront rechargés sans avoir à abaisser / relifting l'application.


1
Cela semble être la solution la plus simple / la plus simple. Installez le npm et ajoutez l'exemple autoreload.js dans le dossier config et vous avez pratiquement terminé.
Braintapper

1
Absolument incroyable. Le plus simple et le plus natif de Sails.
Alexus

Im se Details: Error: ER_ROW_IS_REFERENCED: Cannot delete or update a parent row: a foreign key constraint failjeté par 5/lib/node_modules/sails/lib/hooks/orm/index.js:221quand je sauverai ( en utilisant des voiles 11.3)
Gab

45

Par exemple avec nodemonpour regarder les répertoires api et de configuration

.nodemonignore Contenu

views/*
.tmp/*
.git/*

Exécutez la commande après avoir créé .nodemonignore

$> nodemon -w api -w config

Exemple pour le superviseur d'ignorer 3 répertoires

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

4
J'aime la nodemonsolution par rapport à la foreversolution étant donné la façon dont les nodemontuyaux retournent vers stdout sans configuration supplémentaire. Facilite le flux de travail de développement.
Aaron Ransley

Pour la commande, je viens d'utiliser votre .nodemonignoreexemple et de courir nodemon. Cela fonctionne jusqu'à présent.
Michael J. Calkins

Pour quiconque ne sails liftsait pas comment exécuter les lancements ci-dessus (l'équivalent de) , nodemon sait utiliser app.js.
Tyler Collier


8

installer nodemonglobalement ou localement.

npm install nodemon --save
npm install nodemon -g

installer sailslocalement dans votre projet comme suit

npm install sails --save

puis changez package.json

de

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

à

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

puis

npm run dev

7

J'ai eu le même problème et je l'ai résolu en utilisant grunt-watch et grunt-forever avec des tâches sails @ beta. Le résultat est 4 commandes grunt:

MISE À JOUR: les tâches sont disponibles dans la version actuelle de voiles (ce n'est plus bêta:>)

  • start Démarre le serveur
  • stop Arrête le serveur
  • redémarrer Redémarre le serveur
  • startWatch Démarre le serveur et attend les modifications pour le redémarrer (à l'aide de grunt-watch). C'est probablement votre solution, mais les autres commandes sont également utiles.

Voici le code - J'utilise sails @ beta, qui comprend un répertoire de tâches , je ne sais pas si cela est inclus dans les versions précédentes:

  • Tout d'abord, vous devez installer pour toujours dans votre répertoire sails:

    npm install grunt-forever --save-dev
  • tâches / config / forever.js Configurer la tâche pour toujours.

    module.exports = function(grunt) {
      grunt.config.set('forever', {
        server: {
           options: {
              index: 'app.js',
              logDir: 'logs'
           }
        }
      });
    
      grunt.loadNpmTasks('grunt-forever');
    };
  • tâches / config / watch.js ( modifier ) Modifier la tâche de surveillance afin d'ajouter une nouvelle règle

    // api and assets default rules
    ,
    server: {
        // Server files to watch:
        files: [
            'api/**/*',
            'config/**/*'
        ],
    
        // Restart server
        tasks: ['forever:server:restart']
    }
  • tâches / register / watchForever.js Enregistrez vos tâches personnalisées (ce fichier peut être renommé comme vous le souhaitez)

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

Avec cela, vous devriez pouvoir utiliser

    grunt startWatch

et faites attendre votre serveur que les modifications soient redémarrées:>

J'espère que cela a aidé!


6

Mieux vous utilisez

npm install -g nodemon

J'utilise ceci et cela aidera à améliorer ma vitesse de développement. pas besoin de modifier les fichiers pour celui-ci !.

après l'installation

nodemon app.js

Nodemon est bon si vous souhaitez redémarrer votre serveur à chaque sauvegarde. Mais si vous utilisez webstorm ou tout autre ide avec sauvegarde automatique, il redémarrera continuellement votre serveur.
Vishnu KR

Exactement Monsieur Vishnu KR.
BINFAS K

1

Pour quiconque aborde cette question maintenant, il semble que ce n'est plus nécessaire - une application lancée avec sails liftaura une tâche de surveillance grognante en cours d'exécution, et les changements de code seront visibles sans redémarrage.

Je n'avais pas réalisé que cela se produisait au début car rien n'indique ce qui se passe dans la console, mais cela semble fonctionner sans redémarrage (j'utilise Sails 0.11)


8
Je ne pense pas que ce soit le cas, je dois toujours redémarrer les voiles après avoir changé de contrôleur
fengd

Je dois également redémarrer l'application pour voir mes modifications.
user1007522
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.