【发布时间】:2014-07-19 22:35:28
【问题描述】:
我正在使用 Angular 创建一个论坛 - 它与 Node/Mongo 交互,因此需要执行大量请求才能用所需数据填充页面。一切都在本地正常运行,但是当我上传到 Openshift 时......该网站似乎有很多错误,而且它似乎没有执行超过一半的请求(如果不是全部)或我输入的请求使论坛功能。
我正在使用一个名为 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 并查看该站点。
现在正在发生的事情是(我关注的是)- 当您转到可以查看帖子的页面时(内容、作者、cmets)- 您可以添加 cmets,它们会显示最初是因为 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 时,它变得非常有问题......但这只是一个预感 - 我想测试一下我的理论,我想知道是否有任何方法可以在不缩小的情况下上传到 Openshift?
谢谢!
更新
正如 Pogrindis 和我今天早上讨论的那样……当请求应该发生时,openshift 上的节点日志中出现错误。它在节点日志中说这是一个 Express 错误......我们意识到 openshift 上 npm 的全局版本使用的是 3.2.5,而我使用的种子使用的是 express v4.2.0(这就是我使用的全球,本地)。我正在将我的本地、全球快递 npm 降级到 3.2.5 以查看这是否能解决问题……但是 +1 给 Pogrindis 教我有关节点版本管理器的知识……以及可能同步在 Openshift 上全局安装的任何 npm 包的版本!会及时通知每个人,以确保这能解决问题!
【问题讨论】:
-
您是否意识到您的问题的复杂性?你把它钉在1个区域了吗?我的建议是多调试!!!
-
@Pogrindis 它在本地工作 - 我在 openshift irc 上看看他们是否可以提供帮助 - 但没有人回应 - 这很奇怪,我不知道该怎么做才能调试......如果你有任何想法。 ..
-
所以...那么它的环境......条件是什么? package.json 怎么样?确保我们——保存一切?什么?~!
-
@Pogrindis 以上条件
-
@Pogrindis 上面写着 -
/lib/config/express.js
标签: javascript node.js mongodb express openshift