pm2와 serve의 한 페이지 응용 식용 안내

4921 단어

구덩이

pm2 프로세스 관리, serve 정적 파일 서버 구성은 다음과 같습니다.
// pm2.config.js

module.exports = {
    apps: [
        // ...
        {
            name: 'music-app',
            script: 'serve',
            args: '-p 8080 -s build',
        }
    ]
}

문제는 다음과 같습니다.
  • 직접 액세스 포트, 링크 클릭
  • 페이지를 새로 고치거나 URL을 직접 입력하십시오. 404
  • 명령행 사용serve 직접 서비스 오픈 문제 없음
  • 문제에 관한 상세한 상황은 대대적으로 여기에 도장을 찍었다

    질문 찾기


    수행pm2 show music-app 결과는 다음과 같습니다.
    ➜  hehehe git:(master) ✗ pm2 show music-app      
     Describing process with id 1 - name music-app 
    ┌───────────────────┬──────────────────────────────────────────────────┐
    │ status            │ online                                           │
    │ name              │ music-app                                        │
    │ restarts          │ 69                                               │
    │ uptime            │ 3s                                               │
    │ script path       │ /usr/local/lib/node_modules/pm2/lib/API/Serve.js │
    │ script args       │ -p 8080 -s build                                 │
    │ error log path    │ /Users/xixi/.pm2/logs/music-app-error-1.log   │
    │ out log path      │ /Users/xixi/.pm2/logs/music-app-out-1.log     │
    │ pid path          │ /Users/xixi/.pm2/pids/music-app-1.pid         │
    │ interpreter       │ node                                             │
    │ interpreter args  │ N/A                                              │
    │ script id         │ 1                                                │
    │ exec cwd          │ /Users/xixi/work/hehehe                       │
    │ exec mode         │ fork_mode                                        │
    │ node.js version   │ 8.6.0                                            │
    │ watch & reload    │ ✘                                                │
    │ unstable restarts │ 0                                                │
    │ created at        │ 2017-10-11T10:07:33.119Z                         │
    └───────────────────┴──────────────────────────────────────────────────┘
    

    emmmm, 주의script path, 분명히 실행하는 것은 우리가 원하는 것이 아니다serve.넘어지다

    왜 이러지?


    원인은 여기에 있다. 찔러라!pm2는 2.4.0 버전 이후 정적 파일 서버를 직접 열 수 있습니다. 듣기에는 아름답지만!!!정적 서버를 열라는 명령도 serve 이기 때문에 우리는 원하는 nodejsserve 패키지로 서버를 열 수 있는 것이 아니라pm2 내장 기능을 사용했다.내장된 정적 파일 서비스 기능이 단일 페이지에 최적화되지 않았기 때문에 이러한 문제가 발생할 수 있습니다.

    두 가지 솔루션

  • nodejsserve 패키지 실행 파일의 경로를 직접 지정합니다:
  • // pm2.config.js
    
    const path = require('path')
    
    module.exports = {
        apps: [
            // ...
            {
                name: 'music-app',
                script: path.resolve(__dirname, './node_modules/serve/bin/serve.js'),
                args: '-p 8080 -s build',
            }
        ]
    }
    
  • 전역의 nodejsserve에 별명을 지어줍니다. 예를 들어 수정.bashrc.

  • 그런 다음 다음pm2 show music-app을 수행합니다. 결과는 다음과 같습니다.
    ➜  hehehe git:(master) ✗ pm2 show music-app                                  
     Describing process with id 1 - name music-app 
    ┌───────────────────┬────────────────────────────────────────────────────────────┐
    │ status            │ online                                                     │
    │ name              │ music-app                                                  │
    │ restarts          │ 0                                                          │
    │ uptime            │ 8s                                                         │
    │ script path       │ /Users/xixi/work/hehehe/node_modules/serve/bin/serve.js │
    │ script args       │ build/ -s -p 3030                                          │
    │ error log path    │ /Users/xixi/.pm2/logs/music-app-error-1.log             │
    │ out log path      │ /Users/xixi/.pm2/logs/music-app-out-1.log               │
    │ pid path          │ /Users/xixi/.pm2/pids/music-app-1.pid                   │
    │ interpreter       │ node                                                       │
    │ interpreter args  │ N/A                                                        │
    │ script id         │ 1                                                          │
    │ exec cwd          │ /Users/xixi/work/hehehe                                 │
    │ exec mode         │ fork_mode                                                  │
    │ node.js version   │ 8.6.0                                                      │
    │ watch & reload    │ ✘                                                          │
    │ unstable restarts │ 0                                                          │
    │ created at        │ 2017-10-11T10:11:23.846Z                                   │
    └───────────────────┴────────────────────────────────────────────────────────────┘
    

    보시다시피 script path 이미 우리가 원하는 경로이고 문제가 해결되었다.

    좋은 웹페이지 즐겨찾기