如何让 Openshift 使用 Express 4,而不是其安装的 Express 3?
How do I make Openshift to use Express 4, instead of its installed Express 3?
我使用 Express 4 在本地开发了我的 Nodejs Express 应用程序,它在我的计算机上按预期运行。然后我 git 整个应用程序到 Openshift。当我尝试 运行 它 Openshift returns“503 服务不可用”。如果我通过 ssh 进入我的基本节点盒并执行 "express -V" 它 returns 版本 3.2.5。如果我在 app-root/repo 和 运行 "express -V" 进入我的应用程序文件夹,我会得到相同的版本 3.2.5。
很明显我的 Express 4 没有被使用,它包含在我的应用 node_modules 的 git 上传中。我的应用要求使用 Express 4 的解决方案是什么?
想法是 - 删除 Openshift 的 Express 3 版本,强制 Openshift 在我的应用程序区域中使用我的 Express 4,将 Openshift 的 Express 3 升级到 Express 4。我不知道如何做这些,我已经研究了这个.
以下是问题排查方法:
- ssh 进入您的卡带
- cd 进入 app-root/repo 目录
- 运行
grep version ./node_modules/express/package.json
- 您应该会看到一个基于您的
package.json
依赖项的版本
- 验证您的 package.json 有一个
scripts
部分包含一个 start
命令,该命令只是 运行 您的应用程序带有 node ./server.js
(server.js 是您在其中编写主应用程序启动脚本的任何文件)。您不需要 express
命令行程序来启动快速服务器。它用于设置新项目样板和其他辅助任务。
- 要在您的应用中查看 express 运行ning 的版本,您可以将此代码添加到您的
server.js
(或等效文件):console.log(require("express/package").version);
试试这个
rhc ssh
cd app-root/repo
npm 开始
同时编辑 ./bin/www
var port = normalizePort(process.env.OPENSHIFT_NODEJS_PORT || '8080');
var ip = process.env.OPENSHIFT_NODEJS_IP;
if (typeof ip === "undefined") {
// Log errors on OpenShift but continue w/ 127.0.0.1 - this
// allows us to run/test the app locally.
console.warn('No OPENSHIFT_NODEJS_IP var, using 127.0.0.1');
ip = "127.0.0.1";
};
//app.set('ip', port);
app.set('port', port);
var server = http.createServer(app);
server.listen(port, ip);
server.on('error', onError);
server.on('listening', onListening);
查看这个项目,了解如何将 openshift 与 express4 集成
这是一个简单的例子。
您可以按照以下步骤操作:
复制所有内容bin/www
并替换文件server.js
中的所有内容:
更改server.js
处的一些内容:
来自
`var port = normalizePort(process.env.PORT || '3000');`
到
var port = normalizePort(process.env.OPENSHIFT_NODEJS_PORT || '3000');
添加行:
var ip = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1';
来自
server.listen(port);
到
server.listen(port, ip);
- 添加更多 package.json
来自
"scripts": {
"start": "node bin/www"
},
到
"scripts": {
"start": "node server.js"
},
添加行:
"main": "server.js",
将npm install --save module-name
用于npm install
创建内容为 .gitignore 的文件:
node_modules
在本地 运行 node server.js
启动地址为 localhost:3000
的服务器
上传到 openshift:
git add .
git commit -m "First update new server version"
git push
浏览器:domain-appname.rhcloud.com
我使用 Express 4 在本地开发了我的 Nodejs Express 应用程序,它在我的计算机上按预期运行。然后我 git 整个应用程序到 Openshift。当我尝试 运行 它 Openshift returns“503 服务不可用”。如果我通过 ssh 进入我的基本节点盒并执行 "express -V" 它 returns 版本 3.2.5。如果我在 app-root/repo 和 运行 "express -V" 进入我的应用程序文件夹,我会得到相同的版本 3.2.5。
很明显我的 Express 4 没有被使用,它包含在我的应用 node_modules 的 git 上传中。我的应用要求使用 Express 4 的解决方案是什么?
想法是 - 删除 Openshift 的 Express 3 版本,强制 Openshift 在我的应用程序区域中使用我的 Express 4,将 Openshift 的 Express 3 升级到 Express 4。我不知道如何做这些,我已经研究了这个.
以下是问题排查方法:
- ssh 进入您的卡带
- cd 进入 app-root/repo 目录
- 运行
grep version ./node_modules/express/package.json
- 您应该会看到一个基于您的
package.json
依赖项的版本 - 验证您的 package.json 有一个
scripts
部分包含一个start
命令,该命令只是 运行 您的应用程序带有node ./server.js
(server.js 是您在其中编写主应用程序启动脚本的任何文件)。您不需要express
命令行程序来启动快速服务器。它用于设置新项目样板和其他辅助任务。 - 要在您的应用中查看 express 运行ning 的版本,您可以将此代码添加到您的
server.js
(或等效文件):console.log(require("express/package").version);
试试这个
rhc ssh
cd app-root/repo
npm 开始
同时编辑 ./bin/www
var port = normalizePort(process.env.OPENSHIFT_NODEJS_PORT || '8080');
var ip = process.env.OPENSHIFT_NODEJS_IP;
if (typeof ip === "undefined") {
// Log errors on OpenShift but continue w/ 127.0.0.1 - this
// allows us to run/test the app locally.
console.warn('No OPENSHIFT_NODEJS_IP var, using 127.0.0.1');
ip = "127.0.0.1";
};
//app.set('ip', port);
app.set('port', port);
var server = http.createServer(app);
server.listen(port, ip);
server.on('error', onError);
server.on('listening', onListening);
查看这个项目,了解如何将 openshift 与 express4 集成 这是一个简单的例子。
您可以按照以下步骤操作:
复制所有内容
bin/www
并替换文件server.js
中的所有内容:更改
server.js
处的一些内容:
来自
`var port = normalizePort(process.env.PORT || '3000');`
到
var port = normalizePort(process.env.OPENSHIFT_NODEJS_PORT || '3000');
添加行:
var ip = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1';
来自
server.listen(port);
到
server.listen(port, ip);
- 添加更多 package.json
来自
"scripts": {
"start": "node bin/www"
},
到
"scripts": {
"start": "node server.js"
},
添加行:
"main": "server.js",
将
npm install --save module-name
用于npm install
创建内容为 .gitignore 的文件:
node_modules
在本地 运行
node server.js
启动地址为 localhost:3000 的服务器
上传到 openshift:
git add .
git commit -m "First update new server version"
git push
浏览器:
domain-appname.rhcloud.com