符号链接目录中的 pm2 应用程序产生 502 Bad Gateway
pm2 app in symlink'd directory yields 502 Bad Gateway
我有一个 node.js 应用程序通过 pm2
配置为 运行,目录结构如下:
/opt/project/v1/web/index.js
/opt/project/current -> /opt/project/v1
也就是说,current 是 v1 的符号链接。我需要 pm2
才能在 current/web 中启动应用程序,而不是在 v1/web.[=26= 中]
我第一次这样做:
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 是个问题,然后我尝试了这个,也是从那个线程:
创建文件app.json:
{
"apps": [
{
"name": "index",
"script": "index.js",
"args": [],
"watch": true,
"node_args": "",
"merge_logs": true,
"cwd": "/opt/project/current/web",
"env": {
}
}
]
}
开始于pm2 start app.json
当我这样做时,结果与之前的尝试相同,除了 pm2
显示正确的 cwd,但仍然得到 502。
None 的日志文件似乎显示任何错误并且 pm2 显示应用在线。
我真的对node.js或pm2
一无所知,我被交给了一个现有的系统,并负责稍微重组文件系统。我现在对 pm2
的命令有非常基本的工作知识,仅此而已。
所以我的问题是:如何在符号链接路径中将应用程序转到 运行 以及为什么在我尝试时它会以 502 响应?
好吧,我明白了。我通过使用这个配置文件(另存为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
它的效果非常好,虽然我不确定究竟是哪个差异解决了问题,但我没有花时间进一步调查。
我有一个 node.js 应用程序通过 pm2
配置为 运行,目录结构如下:
/opt/project/v1/web/index.js
/opt/project/current -> /opt/project/v1
也就是说,current 是 v1 的符号链接。我需要 pm2
才能在 current/web 中启动应用程序,而不是在 v1/web.[=26= 中]
我第一次这样做:
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 是个问题,然后我尝试了这个,也是从那个线程:
创建文件app.json:
{ "apps": [ { "name": "index", "script": "index.js", "args": [], "watch": true, "node_args": "", "merge_logs": true, "cwd": "/opt/project/current/web", "env": { } } ] }
开始于
pm2 start app.json
当我这样做时,结果与之前的尝试相同,除了 pm2
显示正确的 cwd,但仍然得到 502。
None 的日志文件似乎显示任何错误并且 pm2 显示应用在线。
我真的对node.js或pm2
一无所知,我被交给了一个现有的系统,并负责稍微重组文件系统。我现在对 pm2
的命令有非常基本的工作知识,仅此而已。
所以我的问题是:如何在符号链接路径中将应用程序转到 运行 以及为什么在我尝试时它会以 502 响应?
好吧,我明白了。我通过使用这个配置文件(另存为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
它的效果非常好,虽然我不确定究竟是哪个差异解决了问题,但我没有花时间进一步调查。