站点在本地工作/不在Openshift上工作(与服务器、全局npm包版本同步本地、全局npm包版本)

Site works locally / Not on Openshift (syncing local, global npm package versions with server, global npm package versions)

本文关键字:包版本 npm 版本 全局 工作 同步 不在 Openshift 站点 服务器      更新时间:2023-09-26

我正在用Angular创建一个论坛——它与Node/Mongo接口,所以有很多请求需要执行才能用所需的数据填充页面。一切工作完全像它应该在本地,但当我上传到Openshift…这个网站似乎有很多bug,而且它似乎没有执行超过一半的请求(如果不是全部的话)或我为使论坛功能而提出的请求。

我正在使用称为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并查看网站。

现在发生的事情是(我关注的)-当你进入一个页面,你可以查看帖子(它的内容,它的作者,它的评论)-你可以添加评论,它们会首先显示出来,因为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个月的艰苦劳动)没有任何意义,除非在你的包中指定了一个版本。

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

从问题…这只能是版本问题