코드 변경시 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 : Forever restarting because /.tmp 의 문제를 참조하십시오 .


7
.foreverignore변경 사항을 즉시 확인하기 위해 다시 시작할 필요가 없으므로에 뷰를 추가 할 수도 있습니다 . 예**/views/**
Seth Malaki 2014

그러나 불행히도 이로 인해 부트 스트랩 코드가 다시 실행되고 세션이 손실됩니다.
rahulserver jul.

1
이것을 사용했지만 다음 경고가 표시됩니다. --minUptime이 설정되지 않았습니다. 기본값 : 1000ms. 이 변수를 어떻게 설정합니까?
Golinmarq

47

sails-hook-autoreload를 사용할 수 있습니다.

정상적으로 앱을 들어 올리면 모델 또는 컨트롤러 파일을 추가 / 변경 / 제거 할 때 앱을 낮추거나 다시 들어 올릴 필요없이 모든 컨트롤러와 모델이 다시로드됩니다.


1
이것은 가장 간단하고 쉬운 해결책 인 것 같습니다. npm을 설치하고 샘플 autoreload.js를 config 폴더에 추가하면 기본적으로 완료됩니다.
Braintapper

1
정말 대단해. 가장 간단하고 가장 고유 한 Sails.
Alexus

저축 할 때 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 사용)
Gab

45

예를 들어 nodemonapi 및 config 디렉토리를 감시하려면

.nodemonignore 내용

views/*
.tmp/*
.git/*

.nodemonignore를 만든 후 명령 실행

$> nodemon -w api -w config

감독자가 3 개의 디렉토리를 무시하는 예

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

4
파이프가 추가 구성없이 표준 출력으로 다시 출력되는 방식을 고려할 때 nodemon솔루션보다 솔루션이 마음 에 듭니다. 개발 워크 플로를 더 쉽게 만듭니다. forevernodemon
Aaron Ransley 2014

명령에 대해 방금 .nodemonignore예제를 사용 하고 nodemon. 지금까지 작동합니다.
Michael J. Calkins 2014

위의 실행 방법에 대해 혼란스러워하는 sails lift사람을 위해 nodemon은 app.js.
Tyler Collier


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

나는 같은 문제가 있었고 sails @ beta 작업과 함께 grunt-watch 및 grunt-forever를 사용하여 문제를 해결했습니다. 결과는 4 개의 grunt 명령입니다.

업데이트 : 작업은 현재 sails 버전에서 사용할 수 있습니다 (더 이상 베타 버전이 아닙니다. :>).

  • start 서버를 시작 합니다.
  • stop 서버를 중지합니다.
  • restart 서버를 다시 시작합니다.
  • 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 ( 편집 ) 새 규칙을 추가하기 위해 감시 작업 편집

    // 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

변경 사항이 다시 시작될 때까지 서버를 기다리십시오.

이것이 도움이 되었기를 바랍니다!


6

더 나은 사용

npm install -g nodemon

나는 이것을 사용하고 있으며 개발 속도를 향상시키는 데 도움이 될 것입니다. 이 파일을 위해 파일을 편집 할 필요가 없습니다!.

설치 후

nodemon app.js

저장할 때마다 서버를 다시 시작하려는 경우 Nodemon이 좋습니다. 그러나 webstorm 또는 자동 저장 기능이있는 IDE를 사용하는 경우 서버를 계속 다시 시작합니다.
Vishnu KR

정확히 Mr. Vishnu KR.
BINFAS K

1

지금이 질문에 답하는 사람에게는 이것이 더 이상 필요하지 않은 것 같습니다.로 시작된 응용 프로그램 sails lift에는 지저분한 감시 작업이 실행되고 코드 변경 사항은 다시 시작하지 않고도 볼 수 있습니다.

콘솔에서 무슨 일이 일어나고 있는지 나타내는 것이 없기 때문에 처음에는 이것이 발생한다는 것을 몰랐지만 다시 시작하지 않고도 작동하는 것 같습니다 (Sails 0.11을 사용하고 있습니다)


8
나는 이것이 사실이라고 생각하지 않습니다. 컨트롤러를 변경 한 후에도 돛을 다시 시작해야합니다
fengd

또한 변경 사항을 보려면 앱을 다시 시작해야합니다.
user1007522
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.