2013-09-08 3 views
85

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

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

ответ

61

Вы должны использовать Бодрствующего как forever, nodemon или что-то еще ...

Пример

  1. Установите навсегда командой:

    sudo npm install -g forever

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

    forever -w start app.js


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

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

См выпуск на GitHub: Forever restarting because of /.tmp.

+7

Вы также можете добавить взгляды '.foreverignore', поскольку они не требуют перезагружается, чтобы увидеть изменения немедленно. например '**/views/**' –

+0

Мы также можем использовать ** pm2 ** для этого. https://github.com/Unitech/PM2 – bmustata

+0

, но, к сожалению, это приведет к повторному запуску кода начальной загрузки и потере сеансов. – rahulserver

37

Например, с nodemon смотреть API и конфигурационные каталоги

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

views/* 
.tmp/* 
.git/* 

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

$> nodemon -w api -w config 

Пример для супервизора, чтобы игнорировать 3 директории

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

Мне нравится решение 'nodemon' над решением' forever', учитывая, как 'nodemon' выводит обратно на stdout без дополнительной конфигурации. Делает процесс разработки более простым. –

+0

Для команды я просто использовал ваш пример .nodemonignore и запустил 'nodemon'. Он работает до сих пор. –

+0

Чтобы кто-то еще не понимал, как работает над запуском (эквивалент) 'sails lift', nodemon знает, как использовать' app.js'. –

7

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

UPDATE: задачи доступны в текущей версии парусов (это уже не бета:>)

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

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

  • Прежде всего вы должны установить навсегда в вашей директории парусов:

    npm install grunt-forever --save-dev 
    
  • задачи/Config/forever.js Настройка навсегда задачи.

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

    // api and assets default rules 
    , 
    server: { 
        // Server files to watch: 
        files: [ 
         'api/**/*', 
         'config/**/*' 
        ], 
    
        // Restart server 
        tasks: ['forever:server:restart'] 
    } 
    
  • задачи/регистрация/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 

и сделать свое ожидание сервера для изменения, необходимо перезапустить:>

Надеется, что это помогло!

42

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

Just lift your app as normal, and when you add/change/remove a model or controller file, all controllers and models will be reloaded without having to lower/relift the app.

+1

Это, кажется, самое простое/простое решение. Установите npm и добавьте образец autoreload.js в папку config, и вы в основном выполняете. – Braintapper

+1

Совершенно удивительно. Самый простой и самый родной для Sails. – Alexus

+0

Im get 'Подробности: Ошибка: ER_ROW_IS_REFERENCED: Не удается удалить или обновить родительскую строку: ошибка ограничения внешнего ключа, вызванная' 5/lib/node_modules/sails/lib/hooks/orm/index.js: 221', когда я сохраняю (с использованием парусов 11.3) – Gab

1

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

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

+5

Я не думаю, что это так, мне все равно придется перезапускать паруса после того, как я сменил любой контроллер. – fengd

8

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

npm install sails-hook-autoreload 

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

+0

Об этом уже говорил старший ответ Виталия Масланока. –

1

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

npm install -g nodemon 

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

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

nodemon app.js 
+0

Nodemon хорош, если вы хотите перезагрузить сервер для каждого сохранения. Но если вы используете webstorm или любой идеал с автоматическим сохранением, он будет продолжать перезагружать ваш сервер. –

+0

Ровно г-н Вишну КР. –

3

установить 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