2016-12-03 81 views
0

我有配置成運行通過pm2在目錄結構中這樣的應用程序的node.js:PM2應用502產生錯誤的網關

/opt/project/v1/web/index.js 
/opt/project/current -> /opt/project/v1 

即,電流是一個符號鏈接到v1。我需要pm2才能啓動current/web,而不是v1/web

我第一次做這樣的:

cd /opt/project/current/web 
pm2 start index.js 

該網站運行正常,但pm2解決了符號鏈接/opt/project/v1/web/index.js。所以我發現this forum thread about pm2 resolving symlinks,並從那裏我嘗試這樣做,而不是:

cd /opt/project 
pm2 start current/web/index.js 

的過程中出現開始,pm2顯示了它在列表中,顯示了象徵性的路徑,除了瀏覽網頁,現在產生一個502(錯誤網關)錯誤。

pm2 show爲最後一次嘗試的輸出是:

┌───────────────────┬───────────────────────────────────────┐ 
│ status   │ online        │ 
│ name    │ index         │ 
│ restarts   │ 7          │ 
│ uptime   │ 2s         │ 
│ script path  │ /opt/project/current/web/index.js  │ 
│ script args  │ N/A         │ 
│ error log path │ /root/.pm2/logs/index-error-0.log  │ 
│ out log path  │ /root/.pm2/logs/index-out-0.log  │ 
│ pid path   │ /root/.pm2/pids/index-0.pid   │ 
│ interpreter  │ node         │ 
│ interpreter args │ N/A         │ 
│ script id   │ 0          │ 
│ exec cwd   │ /opt/project       │ 
│ exec mode   │ fork_mode        │ 
│ node.js version │ 6.8.1         │ 
│ watch & reload │ ✘          │ 
│ unstable restarts │ 0          │ 
│ created at  │ 2016-12-03T22:08:58.972Z    │ 
└───────────────────┴───────────────────────────────────────┘ 

思考,也許不同的CWD是一個問題,然後我想這一點,也是從那個線程:

  1. 創建文件app.json

    { 
    "apps": [ 
        { 
         "name": "index", 
         "script": "index.js", 
         "args": [], 
         "watch": true, 
         "node_args": "", 
         "merge_logs": true, 
         "cwd": "/opt/project/current/web", 
         "env": { 
         } 
        } 
        ] 
    } 
    
  2. 開始pm2 start app.json

當我這樣做的結果是相同的,只是pm2上次嘗試顯示正確的CWD,但仍然得到了日誌文件的502

似乎都不顯示任何錯誤,pm2將該應用程序顯示爲在線。

我真的不知道關於node.js或pm2的任何信息,我交給了一個現有的系統,並負責重新組織文件系統。我現在對pm2的命令有一個非常基本的工作知識,但就是這樣。

所以我的問題是:如何讓應用程序在符號鏈接的路徑中運行,以及爲什麼當我嘗試時用502響應?

回答

0

嗯,我想通了。我解決它通過使用此配置文件(保存爲app.json):

{ 
    "apps": [ 
    { 
     "name": "index", 
     "script": "./index.js", 
     "cwd": "/opt/project/current/web", 
     "exec_mode": "fork_mode", 
     "env": { 
     } 
    } 
    ] 
} 

並啓動它想:

cd /opt/project 
pm2 start current/web/app.json 

和它的工作就像一個魅力,但我不知道到底是哪這裏的區別解決了這個問題,我沒有花時間進一步調查。