【问题标题】:Why does pushing my locally created MEAN-Application to OpenShift not work?为什么将我本地创建的 MEAN-Application 推送到 OpenShift 不起作用?
【发布时间】:2023-03-15 21:30:02
【问题描述】:

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

当我在不输入存储库 URL 的情况下创建新应用程序,然后从 Openshift 中提取,复制到我的项目并再次推送时,我收到类似的错误:

端口 8080 不可用似乎有些问题,但我自己无法解决这个问题,因为我是新手,无法在网络上找到解决方案,因此感谢任何帮助和建议。

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

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

再次,如果有人碰巧知道对此的快速解决方法,请告诉我,因为我仍然想使用 OpenShift。

【问题讨论】:

  • 错误信息显示端口 8080 不可用。您的配置中是否有硬编码端口 8080,或者您是否像应该使用的那样使用 OPENSHIFT_NODEJS_PORT 的值?
  • 在哪里可以找到配置?当我改变它时它是否仍然可以在本地工作,如果没有,我如何在不每次我想部署时都改变它的情况下实现它?

标签: node.js git openshift openshift-cartridge


【解决方案1】:

您的 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 了解更多信息。

【讨论】:

  • www 文件是由 Express 创建的,它将端口设置为 normalizePort(process.env.PORT || '3000');。我将其更改为 app.set('port', process.env.OPENSHIFT_NODEJS_PORT || process.env.PORT || 3000); app.set('ip', process.env.OPENSHIFT_NODEJS_IP || "127.0.0.1"); 但错误没有改变。
  • 听起来您可能已经有一个正在运行的应用程序版本由于某种原因没有被关闭。您可以尝试重新启动您的应用程序以查看是否可以解决问题。重启说明在这里:help.openshift.com/hc/en-us/articles/…
  • 我试过了,但这不是原因。请查看我更新的问题
  • 我认为您需要通过 SSH 连接到您的服务器并查看 app-root/logs/nodejs.log 中的日志以了解实际情况。
【解决方案2】:

对我有用的是:

  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 server = http.createServer(app);

    /**

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

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

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

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

所有功劳归于thisthis 问题答案。

【讨论】:

    猜你喜欢
    • 2021-10-27
    • 1970-01-01
    • 2020-08-12
    • 2016-11-03
    • 2015-08-30
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    • 2016-01-05
    相关资源
    最近更新 更多