【问题标题】:Site works locally / Not on Openshift (syncing local, global npm package versions with server, global npm package versions)站点在本地工作/不在 Openshift 上(将本地、全局 npm 包版本与服务器、全局 npm 包版本同步)
【发布时间】:2014-07-19 22:35:28
【问题描述】:

我正在使用 Angular 创建一个论坛 - 它与 Node/Mongo 交互,因此需要执行大量请求才能用所需数据填充页面。一切都在本地正常运行,但是当我上传到 Openshift 时......该网站似乎有很多错误,而且它似乎没有执行超过一半的请求(如果不是全部)或我输入的请求使论坛功能。

我正在使用一个名为 angular-fullstackyeoman 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 上更新我的代码所需要做的就是:

  1. 进入控制台中的项目文件夹,输入grunt build(这将创建dist文件夹)

  2. 切换到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


【解决方案1】:

很难回答的问题。有很多值得一看的地方。

版本化

版本在节点中很大,你可能有一个糟糕的版本,sh*t 会打击粉丝。

我想到了一个特殊的VERSION Saving github 主题。

如果这不是问题,您仍然需要记住它不是强类型语言,包括版本控制。

每种情况都不同。

https://github.com/npm/npm/issues/3417

这个问题 'FIX' 会杀死很多一直在使用以前(次要)版本的用户。 您需要具体说明版本控制。 (我以此为例)

你会遇到很多 Node 的版本问题,尽管它很好,除非你指定版本,否则它会得到最新的版本。

因此,除非在您的软件包中指定了版本,否则在本地(3 个月的辛勤劳动)机器上工作没有任何意义。

您的服务器将只有最新版本。

从问题..它只能是一个版本问题。

【讨论】:

  • 嘿,伙计!会回去解决这个问题...需要帮助吗?
  • @ewizard 我在聊天中! ;) chat.stackoverflow.com/rooms/57590/…
  • @Pogrindis...等待关键时刻...我在全球范围内更新了所有内容,网站仍然正常运行...现在重新上传,就像我第一次使用 openshift 上传一样以确保服务器上安装了正确的 npm 版本。
  • @ewizard :) 事情比我想象的要好??
  • @Pogrindis...是的,情况好多了-我现在有这个问题-几乎就在那里...stackoverflow.com/questions/24847384/…
猜你喜欢
  • 2018-12-22
  • 2015-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 2023-03-10
  • 2017-11-15
  • 2021-10-01
相关资源
最近更新 更多