Автоматическая перезагрузка приложения Sails.js при изменении кода?

107

В настоящее время кажется, что для любого изменения кода в приложении sails.js вам необходимо вручную остановить сервер Sails и запустить его sails liftснова, прежде чем вы сможете увидеть изменения.

Мне было интересно, есть ли способ при работе в режиме разработки автоматически перезапускать сервер Sails при обнаружении изменения кода?

субсиний
источник

Ответы:

74

Вы должны использовать наблюдателя, например forever , nodemon или что-то еще ...

пример

  1. Установить навсегда , запустив:

    sudo npm install -g forever

  2. Запустить его:

    forever -w start app.js


Чтобы избежать бесконечного перезапуска из-за того, что Sails записывает в .tmpпапку, вы можете создать .foreverignoreфайл в каталоге своего проекта и поместить его содержимое внутрь:

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

См. Проблему на GitHub: вечный перезапуск из-за /.tmp .

Сандро Мунда
источник
7
Вы также можете добавить представления, .foreverignoreпоскольку они не требуют перезапуска для немедленного просмотра изменений. например**/views/**
Сет Малаки
но, к сожалению, это приведет к повторному выполнению кода начальной загрузки и потере сеансов.
rahulserver
1
Я использовал это, но получаю следующее предупреждение: --minUptime not set. По умолчанию: 1000 мс. Как мне установить эту переменную?
Golinmarq
47

Вы можете использовать sails-hook-autoreload

Просто поднимите свое приложение как обычно, и когда вы добавите / измените / удалите файл модели или контроллера, все контроллеры и модели будут перезагружены без необходимости опускать / перезагружать приложение.

Виталий Маслянок
источник
1
Это кажется самым простым / легким решением. Установите npm и добавьте образец autoreload.js в папку config, и в основном все готово.
Braintapper
1
Совершенно потрясающе. Самый простой и наиболее естественный для Sails.
Alexus
Im получения Details: Error: ER_ROW_IS_REFERENCED: Cannot delete or update a parent row: a foreign key constraint failброшенного 5/lib/node_modules/sails/lib/hooks/orm/index.js:221при сохранении ( с помощью парусов 11.3)
Габ
45

Например, nodemonдля просмотра каталогов api и config

.nodemonignore содержание

views/*
.tmp/*
.git/*

Запустите команду после создания .nodemonignore

$> nodemon -w api -w config

Пример игнорирования супервизором 3 каталогов

$> supervisor -i .tmp,.git,views app.js
беда
источник
4
Мне нравится nodemonрешение по сравнению с foreverрешением, учитывая, как nodemonтрубы возвращаются в стандартный вывод без дополнительной настройки. Облегчает рабочий процесс разработки.
Аарон Рэнсли
Для команды я просто использовал ваш .nodemonignoreпример и запустил nodemon. Пока работает.
Майкл Дж. Калкинс,
Для всех, кто не sails liftпонимает, как запускать вышеупомянутый запуск (эквивалент) , nodemon знает, как использовать app.js.
Тайлер Кольер
9

Если вы используете Sails 0.11, вы можете установить этот хук для автоматической перезагрузки при смене модели или контроллера (представления не требуют перезагрузки):

npm install sails-hook-autoreload

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

Бен Фрид
источник
1
Об этом уже говорилось в предыдущем ответе Виталия Маслянка.
Тайлер Кольер
8

установить nodemonглобально или локально.

npm install nodemon --save
npm install nodemon -g

установить sailsлокально в вашем проекте следующим образом

npm install sails --save

затем измените package.json

из

"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"
},

затем

npm run dev
Муджтаба Каблы
источник
7

У меня была такая же проблема, и я решил ее с помощью grunt-watch и grunt-forever с задачами sails @ beta. Результат - 4 команды ворчания:

ОБНОВЛЕНИЕ: задачи доступны в текущей версии парусов (это уже не бета:>)

  • start Запускает сервер
  • stop Останавливает сервер
  • перезапуск Перезагружает сервер
  • startWatch Запускает сервер и ожидает изменений, чтобы перезапустить его (используя grunt-watch). Вероятно, это ваше решение, но другие команды также могут быть полезны.

Вот код - я использую sails @ beta, который включает каталог задач , я не знаю, включен ли он в предыдущие версии:

  • Прежде всего, вам нужно установить навсегда в каталог sails:

    npm install grunt-forever --save-dev
  • tasks / config / forever.js Настроить вечную задачу.

    module.exports = function(grunt) {
      grunt.config.set('forever', {
        server: {
           options: {
              index: 'app.js',
              logDir: 'logs'
           }
        }
      });
    
      grunt.loadNpmTasks('grunt-forever');
    };
  • tasks / config / watch.js ( edit ) Отредактируйте задачу наблюдения, чтобы добавить новое правило

    // api and assets default rules
    ,
    server: {
        // Server files to watch:
        files: [
            'api/**/*',
            'config/**/*'
        ],
    
        // Restart server
        tasks: ['forever:server:restart']
    }
  • tasks / register / watchForever.js Зарегистрируйте свои пользовательские задачи (этот файл можно переименовать как угодно)

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

С этим вы сможете использовать

    grunt startWatch

и заставьте ваш сервер ждать перезапуска изменений:>

Надеюсь, это помогло!

josec89
источник
6

Лучше использовать

npm install -g nodemon

Я использую это, и это поможет мне улучшить скорость моего развития. для этого не нужно редактировать какие-либо файлы !.

после установки

nodemon app.js
БИНФАС К
источник
Nodemon хорош, если вы хотите перезагружать сервер при каждом сохранении. Но если вы используете webstorm или любой ide с автосохранением, он будет постоянно перезагружать ваш сервер.
Вишну К.Р.
Ровно господин Вишну К.Р.
BINFAS K
1

Для тех, кто сейчас задается этим вопросом, кажется, что в этом больше нет необходимости - приложение, запущенное с, sails liftбудет иметь запущенную задачу grunt watch, и изменения кода будут видны без перезапуска.

Сначала я не понимал, что это происходит, потому что в консоли нет ничего, что указывало бы на то, что происходит, но, похоже, он работает без перезагрузки (я использую Sails 0.11)

Ник Ф
источник
8
Я не думаю, что это так, мне все равно придется перезапускать паруса после смены любого контроллера
fengd
Мне также нужно перезапустить приложение, чтобы увидеть мои изменения.
user1007522