ShipIt node/express 使用 PM2 部署 - 无法设置正确 NODE_ENV
ShipIt node/express deployment with PM2 - cannot set the correct NODE_ENV
我试图在使用 ShipIt(w ships-npm 插件)部署后在正确的环境中启动我的节点应用程序?我在暂存环境中部署它,但应用程序以开发模式启动,如所述显示 yj-he process.env.NODE_ENV
随船部署
>$ shipit staging deploy
Starting deployment...
....
Running 'start_server' task...
Running "cd /opt/hello/releases/20161128182300 && npm start" on host "myhost.live".
@myhost.live
@myhost.live > hello-world-express@0.0.1 start /opt/hello/releases/20161128182300
@myhost.live > pm2 startOrReload ecosystem.json
@myhost.live
@myhost.live [PM2] Applying action reloadProcessId on app [hello](ids: 0)
@myhost.live [PM2] [hello](0) ✓
@myhost.live ┌──────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────┬──────────
@myhost.live │ App name │ id │ mode │ pid │ status │ restart │ uptime
├──────────┼────┼──────┼──────┼────────┼────── ──────┼──────────┼──────┼──────────
@myhost.live │ 你好 │ 0 │ fork │ 7224 │ 在线 │ 2 │ 0s
└──────────┴──────┴──────┴──────┴────────┴──────────┴ ────────┴──────┴──────────
@myhost16.live 使用 pm2 show <id|name>
获取有关应用程序的更多详细信息
9.01 秒后完成 'start_server'
我认为在 'staging' 模式下部署会将 NODE_ENV 设置为 'staging'...不确定
hello.js
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('Hello World! Now you can call Express at 3637');
});
var port = process.env.PORT || 3637;
app.listen(port);
console.log('Now on ' + process.env.NODE_ENV + ' server');
console.log('Express app listening on localhost:'+ port);
控制台日志状态:
0|hello | Now on development server
0|hello | Express app listening on localhost:3637
shipitfile.js
...
// this task starts the application with PM2
shipit.blTask('start_server', function () {
var cwd = shipit.releasePath;
return shipit.remote( "cd " + cwd + " && npm start");
});
shipit.on('deployed', function () {
console.log("Deployed !");
shipit.start('start_server');
});
...
package.json
...
"main": "hello.js",
"scripts": {
"start": "pm2 startOrReload ecosystem.json",
...
ecosystem.json
{
"apps" : [
{
"name": "hello",
"cwd": "/opt/hello/current",
"script": "hello.js",
"args": "",
"watch": true,
"node_args": "",
"merge_logs": true,
"env": {
"NODE_ENV": "development"
},
"env_production": {
"NODE_ENV": "production"
},
"env_staging": {
"NODE_ENV": "staging"
}
}]
}
我的 ecosystem.js 文件有什么问题?
感谢反馈
对于 PM2,要使用生产环境变量(在 env_production 中设置),您需要指定 --env 选项。
Here您可以找到更多相关信息。
要解决您的问题,只需将 --env production 添加到 package.json:
中的开始属性
"start": "pm2 startOrReload ecosystem.json --env production",
我试图在使用 ShipIt(w ships-npm 插件)部署后在正确的环境中启动我的节点应用程序?我在暂存环境中部署它,但应用程序以开发模式启动,如所述显示 yj-he process.env.NODE_ENV
随船部署
>$ shipit staging deploy
Starting deployment...
....
Running 'start_server' task...
Running "cd /opt/hello/releases/20161128182300 && npm start" on host "myhost.live".
@myhost.live
@myhost.live > hello-world-express@0.0.1 start /opt/hello/releases/20161128182300
@myhost.live > pm2 startOrReload ecosystem.json
@myhost.live
@myhost.live [PM2] Applying action reloadProcessId on app [hello](ids: 0)
@myhost.live [PM2] [hello](0) ✓
@myhost.live ┌──────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────┬──────────
@myhost.live │ App name │ id │ mode │ pid │ status │ restart │ uptime
├──────────┼────┼──────┼──────┼────────┼────── ──────┼──────────┼──────┼──────────
@myhost.live │ 你好 │ 0 │ fork │ 7224 │ 在线 │ 2 │ 0s
└──────────┴──────┴──────┴──────┴────────┴──────────┴ ────────┴──────┴──────────
@myhost16.live 使用 pm2 show <id|name>
获取有关应用程序的更多详细信息
9.01 秒后完成 'start_server'
我认为在 'staging' 模式下部署会将 NODE_ENV 设置为 'staging'...不确定
hello.js
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('Hello World! Now you can call Express at 3637');
});
var port = process.env.PORT || 3637;
app.listen(port);
console.log('Now on ' + process.env.NODE_ENV + ' server');
console.log('Express app listening on localhost:'+ port);
控制台日志状态:
0|hello | Now on development server
0|hello | Express app listening on localhost:3637
shipitfile.js
...
// this task starts the application with PM2
shipit.blTask('start_server', function () {
var cwd = shipit.releasePath;
return shipit.remote( "cd " + cwd + " && npm start");
});
shipit.on('deployed', function () {
console.log("Deployed !");
shipit.start('start_server');
});
...
package.json
...
"main": "hello.js",
"scripts": {
"start": "pm2 startOrReload ecosystem.json",
...
ecosystem.json
{
"apps" : [
{
"name": "hello",
"cwd": "/opt/hello/current",
"script": "hello.js",
"args": "",
"watch": true,
"node_args": "",
"merge_logs": true,
"env": {
"NODE_ENV": "development"
},
"env_production": {
"NODE_ENV": "production"
},
"env_staging": {
"NODE_ENV": "staging"
}
}]
}
我的 ecosystem.js 文件有什么问题?
感谢反馈
对于 PM2,要使用生产环境变量(在 env_production 中设置),您需要指定 --env 选项。
Here您可以找到更多相关信息。
要解决您的问题,只需将 --env production 添加到 package.json:
中的开始属性"start": "pm2 startOrReload ecosystem.json --env production",