https://github.com/ramr/nodejs-custom-version-openshift
由于是线上服务器,一步一步来:
先把上面的工程拉下来,覆盖到初始化的工程里,提交,让服务器端装起来。
# Uncomment one of the version lines to select the node version to use. # The last "non-blank" version line is the one picked up by the code in # .openshift/lib/utils # Default: 0.10.25 # # 0.8.24 # 0.9.1 # 0.10.25 # 0.11.11 # 0.12.2 # 0.12.5 4.2.3
配置好.openshift/markers/NODEJS_VERSION (默认写的4.2.3, 我改的6.9.2)
如果失败了,找到最初commit id 用reset --hard HEAD~1 一版一版往前退,
然后pull 返回去初始状态,否则错上推错很有可能会出现被服务器永久拒绝的状态(哭),那就只能重新建应用了
还没commit的直接 checkout --force 就放弃修改了
一堆无关痛痒的依赖错误之后是:
那么会不会是503呢,它没有明显的deploy failure,说是node启动失败
看看dashboard 状态
只要不是一直被stopped就还有希望
页面并没有受到影响,仍然显示默认的index.html
在dashboard点restart,重启之后页面仍然正常显示,猜想服务器终于把node给升级好啦?
(尝试了一次不点restrt, 跑去网上冲浪不知等了多久也自动能stated) 页面改头换面了:
把package.json里面scripts、dependencies、devDependencies加进去
再次push应该会看到这样
明显的node已经升级成功,但是dashboard上仍然显示0.10
然后我有一个用了webpack的工程需要移植上去,
根据stackoverflow这篇文章,需要设置.openshift中的action_hook下build文件:
create the following file: .openshift/action_hook/build
which contains the following:
#!/bin/bash
webpack --config $OPENSHIFT_DATA_DIR/webpack.config.js
题主出现了报错,但我是一次成功的。。。
另外,如果出现这种问题像我之前查到的解决方式一样需要配置静态地址:
self.initializeServer = function() { self.createRoutes(); self.app = express(); self.app.use('/', express.static(__dirname + '/dist')); // Add handlers for the app (from the routes). for (var r in self.routes) { self.app.get(r, self.routes[r]); } };
还有上面一段populate the cache也需要设置
/** * Populate the cache. */ self.populateCache = function() { if (typeof self.zcache === "undefined") { self.zcache = { 'index.html': '' }; } // Local cache for static content. //原来openshift给的index.html //self.zcache['index.html'] = fs.readFileSync('./index.html'); self.zcache['index.html'] = fs.readFileSync('./dist/index.html'); };
这样就和本地启动一样了,本地npm start还是可以指定其他的入口文件进行本地启动,并不会冲突。
$ git push Counting objects: 35, done. Delta compression using up to 4 threads. Compressing objects: 100% (35/35), done. Writing objects: 100% (35/35), 43.95 KiB | 0 bytes/s, done. Total 35 (delta 13), reused 0 (delta 0) remote: remote: - pre_stop_nodejs: Adding Node.js version 6.9.2 binaries to path remote: - PATH set to include custom node version (6.9.2) from remote: /var/lib/openshift/585cd49089f5cf3e75000095/app-root/data//node-v6.9.2-linux-x64/bin remote: PATH = /var/lib/openshift/585cd49089f5cf3e75000095/app-root/data//node-v6.9.2-linux-x64/bin:/var/lib/openshift/585cd49089f5cf3e75000095/app-root/runtime/repo/node_modules/.bin:/var/lib/openshift/585cd49089f5cf3e75000095//.node_modules/.bin:/opt/rh/nodejs010/root/usr/bin:/bin:/usr/bin:/usr/sbin remote: Stopping NodeJS cartridge remote: Tue Dec 27 2016 03:15:41 GMT-0500 (EST): Stopping application 'angular' ... remote: Tue Dec 27 2016 03:15:42 GMT-0500 (EST): Stopped Node application 'angular' remote: Repairing links for 1 deployments remote: Saving away previously installed Node modules remote: Building git ref 'master', commit d3e7fb0 remote: NOTE: The .openshift/action_hooks/pre_build hook is not executable, to make it executable: remote: On Windows run: git update-index --chmod=+x .openshift/action_hooks/pre_build remote: On Linux/OSX run: chmod +x .openshift/action_hooks/pre_build remote: Building NodeJS cartridge remote: npm info it worked if it ends with ok remote: npm info using npm@2.14.13 remote: npm info using node@v0.10.35 remote: npm info preinstall nodejs-Custom-Version-Sample@1.0.1 remote: npm info package.json core-js@2.4.1 No README data remote: npm info package.json ts-loader@0.8.2 No README data remote: npm info package.json @angular/compiler@2.0.0-rc.6 No README data remote: npm info package.json @angular/common@2.0.0-rc.6 No description remote: npm info package.json @angular/common@2.0.0-rc.6 No README data remote: npm info package.json @angular/compiler-cli@0.6.0 No README data remote: npm info package.json @angular/core@2.0.0-rc.6 No README data remote: npm info package.json @angular/forms@2.0.0-rc.6 No README data remote: npm info package.json @angular/http@2.0.0-rc.6 No README data remote: npm info package.json @angular/platform-browser@2.0.0-rc.6 No README data remote: npm info package.json @angular/platform-browser-dynamic@2.0.0-rc.6 No README data remote: npm info package.json @angular/router@3.0.0-rc.2 No README data remote: npm info package.json @angular/upgrade@2.0.0-rc.6 No description remote: npm info package.json @angular/upgrade@2.0.0-rc.6 No README data remote: npm info package.json echarts@3.3.2 No license field. remote: npm info package.json raw-loader@0.5.1 No license field. remote: npm info build /var/lib/openshift/585cd49089f5cf3e75000095/app-root/runtime/repo remote: npm info linkStuff nodejs-Custom-Version-Sample@1.0.1 remote: npm info install nodejs-Custom-Version-Sample@1.0.1 remote: npm info postinstall nodejs-Custom-Version-Sample@1.0.1 remote: remote: > nodejs-Custom-Version-Sample@1.0.1 postinstall /var/lib/openshift/585cd49089f5cf3e75000095/app-root/runtime/repo remote: > typings install remote: remote: remote: Error: EACCES, permission denied '/var/lib/openshift/585cd49089f5cf3e75000095/.config' remote: at Object.fs.mkdirSync (fs.js:654:18) remote: at sync (/var/lib/openshift/585cd49089f5cf3e75000095/app-root/runtime/repo/node_modules/typings/node_modules/typings-core/node_modules/mkdirp/index.js:71:13) remote: at Function.sync (/var/lib/openshift/585cd49089f5cf3e75000095/app-root/runtime/repo/node_modules/typings/node_modules/typings-core/node_modules/mkdirp/index.js:77:24) remote: at Object.create.all.get (/var/lib/openshift/585cd49089f5cf3e75000095/app-root/runtime/repo/node_modules/typings/node_modules/typings-core/node_modules/configstore/index.js:39:13) remote: at Object.Configstore (/var/lib/openshift/585cd49089f5cf3e75000095/app-root/runtime/repo/node_modules/typings/node_modules/typings-core/node_modules/configstore/index.js:28:44) remote: at Object.<anonymous> (/var/lib/openshift/585cd49089f5cf3e75000095/app-root/runtime/repo/node_modules/typings/node_modules/typings-core/dist/utils/store.js:5:19) remote: at Module._compile (module.js:456:26) remote: at Object.Module._extensions..js (module.js:474:10) remote: at Module.load (module.js:356:32) remote: at Function.Module._load (module.js:312:12) remote: at Module.require (module.js:364:17) remote: at require (module.js:380:17) remote: at Object.<anonymous> (/var/lib/openshift/585cd49089f5cf3e75000095/app-root/runtime/repo/node_modules/typings/node_modules/typings-core/dist/utils/fs.js:29:15) remote: at Module._compile (module.js:456:26) remote: at Object.Module._extensions..js (module.js:474:10) remote: at Module.load (module.js:356:32) remote: remote: npm info nodejs-Custom-Version-Sample@1.0.1 Failed to exec postinstall script remote: npm ERR! Linux 2.6.32-642.6.2.el6.x86_64 remote: npm ERR! argv "node" "/opt/rh/nodejs010/root/usr/bin/npm" "install" "-d remote: npm ERR! node v0.10.35 remote: npm ERR! npm v2.14.13 remote: npm ERR! code ELIFECYCLE remote: npm ERR! nodejs-Custom-Version-Sample@1.0.1 postinstall: `typings install` remote: npm ERR! Exit status 8 remote: npm ERR! remote: npm ERR! Failed at the nodejs-Custom-Version-Sample@1.0.1 postinstall script 'typings install'. remote: npm ERR! This is most likely a problem with the nodejs-Custom-Version-Sample package, remote: npm ERR! not with npm itself. remote: npm ERR! Tell the author that this fails on your system: remote: npm ERR! typings install remote: npm ERR! You can get their info via: remote: npm ERR! npm owner ls nodejs-Custom-Version-Sample remote: npm ERR! There is likely additional logging output above. remote: remote: npm ERR! Please include the following file with any support request: remote: npm ERR! /var/lib/openshift/585cd49089f5cf3e75000095/app-root/runtime/repo/npm-debug.log remote: An error occurred executing 'gear postreceive' (exit code: 1) remote: Error message: CLIENT_ERROR: Failed to execute: 'control build' for /var/lib/openshift/585cd49089f5cf3e75000095/nodejs remote: remote: For more details about the problem, try running the command again with the '--trace' option. To ssh://xxx.rhcloud.com/~/git/angular.git/ bf853eb..d3e7fb0 master -> master
每次push完也没法直接看到页面,总是会进入building,等它打包完自动started就好了。