站点在本地工作/不在Openshift上工作(与服务器、全局npm包版本同步本地、全局npm包版本)
Site works locally / Not on Openshift (syncing local, global npm package versions with server, global npm package versions)
我正在用Angular创建一个论坛——它与Node/Mongo接口,所以有很多请求需要执行才能用所需的数据填充页面。一切工作完全像它应该在本地,但当我上传到Openshift…这个网站似乎有很多bug,而且它似乎没有执行超过一半的请求(如果不是全部的话)或我为使论坛功能而提出的请求。
我正在使用称为angular-fullstack
的yeoman
MEAN
堆栈。如果你有yeoman
,你可以用yo angular-fullstack
创建种子。
为了让它上传到openshift,我唯一需要改变的是:
server.js
...
// Set default node environment to development
process.env.NODE_ENV = process.env.NODE_ENV || 'development';
...
...
// Set default node environment to development
process.env.NODE_ENV = process.env.NODE_ENV || 'production';
...
上面这行指的是lib/config/express.js中的代码:
if ('development' === env) {
app.use(require('connect-livereload')());
// Disable caching of scripts for easier testing
app.use(function noCache(req, res, next) {
if (req.url.indexOf('/scripts/') === 0) {
res.header('Cache-Control', 'no-cache, no-store, must-revalidate');
res.header('Pragma', 'no-cache');
res.header('Expires', 0);
}
next();
});
app.use(express.static(path.join(config.root, '.tmp')));
app.use(express.static(path.join(config.root, 'app')));
app.set('views', config.root + '/app/views');
}
if ('production' === env) {
app.use(compression());
app.use(errorHandler());
app.use(favicon(path.join(config.root, 'public', 'favicon.ico')));
app.use(express.static(path.join(config.root, 'public')));
app.set('views', config.root + '/views');
}
...
// Error handler - has to be last
if ('development' === app.get('env')) {
app.use(errorHandler());
}
所以让我知道如果你注意到任何错误的production
代码块-这是正在运行的。
此外,Mongo URI
需要更改以与我在Openshift上设置的MongoDB墨盒一起工作:
mongo: {
uri: process.env.MONGOLAB_URI ||
process.env.MONGOHQ_URL ||
process.env.OPENSHIFT_MONGODB_DB_URL+process.env.OPENSHIFT_APP_NAME ||
'mongodb://whateveritwas'
}
mongo: {
uri: process.env.MONGOLAB_URI ||
process.env.MONGOHQ_URL ||
process.env.OPENSHIFT_MONGODB_DB_URL+process.env.OPENSHIFT_APP_NAME ||
'mongodb://admin:xxxxx@127.10.13.X:27017/hackabox' //the X's are to protect me
}
最初要让它上传到Openshift,你必须在项目文件夹中运行yo angular-fullstack:openshift
,但我已经这样做了,所以现在我要做的就是更新我在Openshift上的代码:
进入控制台的项目文件夹,输入
grunt build
(这创建了dist
文件夹)进入
dist
文件夹,将所有内容添加到git
并运行git push
。
之后,我可以转到Openshift URL并查看网站。
现在发生的事情是(我关注的)-当你进入一个页面,你可以查看帖子(它的内容,它的作者,它的评论)-你可以添加评论,它们会首先显示出来,因为angular的工作方式…但当我离开又回来的时候……这段代码似乎没有按照它应该执行的方式执行:
$scope.loadpost = function() {
$http.get('/api/posts/'+$routeParams.id).success(function (data) {
$scope.post = data;
$scope.comments = $scope.post.comments;
console.log('this is scope comments ' + $scope.comments);
if($scope.comments[0] !== undefined) {
$scope.commentstring.empty = '';
}
});
};
用于测试目的…我在post控制器的顶部调用它,像这样:
$scope.loadpost();
我也使用ng-init
调用它时,页面加载,像这样:
<div ng-init="loadpost()">
这是我详细介绍问题的地方
我知道这是多余的…但重点是…当页面加载时,该函数永远不会被调用…并且它需要从数据库获取的所有帖子内容永远不会到达,因为请求永远不会发生——我可以看到控制台中什么也没有发生——您也可以,查看我在页面http://hackabox-eamonbenproject.rhcloud.com/forum的"论坛"部分所谈论的内容。要发帖,你必须注册为用户。然后你可以去论坛看看我在说什么,点击其中一个帖子…发表评论……然后航行离开,再回来……你不需要做评论,你会发现什么都没有显示出来……但它会帮助你看到的问题,因为当评论被创建,一个PUT
请求应该发生更新的帖子,但这从来没有发生过…以及一堆不被调用的GET
请求。还有一件事,我注意到(至少一次)…如果我在论坛上做了什么…然后导航到"设置"页面,有时徽标会消失…
我开始认为当我运行grunt build
时进行的缩小过程会弄乱代码…所以当它被加载到openshift时,它变得非常有bug…但这只是一种预感-我想测试我的理论,我想知道是否有办法上传到Openshift而不缩小?
谢谢!
正如我和Pogrindis今天早上讨论的…当一个请求应该发生时,openshift上的节点日志中有一个错误。它在节点日志中说这是一个Express错误…我们意识到openshift上npm的全局版本使用的是3.2.5,而我使用的种子使用的是express v4.2.0(这就是我在全局和本地使用的版本)。我正在将本地的全局express npm降级到3.2.5,看看这是否能纠正问题…但是+1给Pogrindis教我Node版本管理器…同时还可能需要同步Openshift上全局安装的所有npm包的版本!将保持每个人张贴,以确保这解决了问题!
这个问题很难回答。有很多好看的
Version-ing
版本在node中是巨大的,你可能有一个不好的版本,然后就完蛋了。
有一个特殊的版本保存github主题想到。
如果这不是问题,您仍然需要记住,它不是强类型语言,它包括版本控制。
情况各不相同。
https://github.com/npm/npm/issues/3417这个问题'FIX'将杀死许多使用以前(次要)版本的用户。您需要明确版本控制。(我用这个作为例子)
使用Node会遇到很多版本问题,尽管它很好,除非你指定版本,否则它会得到最新版本。
所以,在你的本地机器上工作(3个月的艰苦劳动)没有任何意义,除非在你的包中指定了一个版本。
您的服务器将只有最新版本。
从问题…这只能是版本问题
- JS编译器/包管理器,用于版本控制
- 部署时使用npm包时发生Meteor错误
- 在Meteor中使用具有依赖关系的NPM包
- npm警告包.jsonCrackingJS@0.0.1没有存储库字段
- 在npm中加载一个包的多个版本
- 安装节点6后出错,npm ERR!无效版本:1.0.5beta
- 如何在单个系统上使用不同版本的node/npm
- 如何从npm注册表中删除npm包
- 如何在不使用 npm 包的情况下编写香草 nodejs 路由器
- 预构建的NPM包:如何为用户省去依赖关系
- “;在“;npm包上的(@)前缀
- 使用NPM和Watchify编译多个脚本包
- 如何将Bootstrap npm包与React一起使用
- npm安装can'找不到新版本
- github的npm包,缺少文件
- 在node.js中轻松打印当前包版本
- @next为 npm 指定什么包版本
- 站点在本地工作/不在Openshift上工作(与服务器、全局npm包版本同步本地、全局npm包版本)
- 如何知道来自节点包管理(NPM)的包是否经过测试
- 比较本地节点模块版本与包版本.json版本