为什么将我在本地创建的 MEAN-Application 推送到 OpenShift 不起作用?

Why does pushing my locally created MEAN-Application to OpenShift not work?

我正在尝试将我使用 express 在本地创建的 MEAN 应用程序推送到 OpenShift。为此,我从仪表板创建了一个新应用程序并将 NodeJS 添加为一个插件。然后,当我添加 Git-Repository-URL(托管在 BitBucket 上)并创建应用程序时,出现以下错误:

当我在没有进入存储库的情况下创建一个新应用程序 URL 然后从 Openshift 中拉取,复制到我的项目中并再次推送时,我得到了类似的错误:

这似乎是端口 8080 不可用的一些问题,但我自己无法解决这个问题,因为我是新手并且在网上找不到解决方案,因此非常感谢您的帮助和建议。

编辑:当我说 MEAN 时,我实际上是指 EAN;我现在不使用 MongoDB。

编辑 2:几个小时后我决定尝试 Heroku。它在第一次尝试时也没有工作,但日志包含更多有用的信息,所以我在大约一个小时内完成了所有工作并 运行 (相比之下,使用 OpenShift 尝试了大约 4 个小时)。之后我尝试将我推送到 Heroku 的完全相同的项目推送到 Openshift 并得到以下新错误:

同样,如果有人碰巧知道此问题的快速修复方法,请告诉我,因为我仍然想使用 OpenShift。

您的 NodeJS 代码应如下所示:

var port = process.env.OPENSHIFT_NODEJS_PORT || 8080;
http.createServer().listen(port);

这将使用 OPENSHIFT_NODEJS_PORT 的值(如果可用),并且当您 运行 OpenShift 之外的应用程序时仍然使用 8080。或者您甚至可以在本地计算机上设置环境变量 OPENSHIFT_NODEJS_PORT=8080 以更接近地模拟 OpenShift 环境。

请注意,您还应该检查环境变量以获得正确的服务器 IP 地址。有关详细信息,请参阅 this documentation

对我有用的是:

  1. 在 OpenSHift 上创建应用程序,暂时将 Repo Url 留空。
  2. 使用 git remote add openshift -f <openshift-git-repo-url (ssh://...something)> 将 Openshift-Repo 作为远程 Repo 添加到您的项目中。
  3. 使用 git merge openshift/master -s recursive -X ours 将 Openshift-Repo 合并到您的本地 Repo 并在出现冲突时保留您的文件。
  4. (这是重要的一步)你的主文件(对我来说bin/www)必须看起来像这样(我试过everything格式化它,但它只是没有正确格式化):

    var app = require('../app'); var debug = require('debug')('CTW:server'); var http = require('http');

    /**

    • 从环境中获取端口并存储在 Express 中。 */ app.set('port', process.env.OPENSHIFT_NODEJS_PORT || process.env.PORT || 3002); app.set('ip', process.env.OPENSHIFT_NODEJS_IP || "127.0.0.1");

    /**

    • 创建 HTTP 服务器。 */

    var 服务器 = http.createServer(app);

    /**

    • 在所有网络接口上侦听提供的端口。 */

    server.listen(app.get('port') ,app.get('ip'));

  5. git push openshift HEAD 将其推送到您的应用程序仓库

事实证明,我必须设置 IP。

所有功劳归于 this and 个问题答案。