【问题标题】:How to start express server in Heroku multi buildpack php + nodejs如何在 Heroku multi buildpack php + nodejs 中启动 express 服务器
【发布时间】:2018-10-12 02:03:38
【问题描述】:

我正在 Heroku 上创建一个 webapp,我需要在我的 php 应用程序的一部分中进行一些实时数据更新。

所以我想我可以在 express 服务器上使用 socket.io 来提供实时通信功能。

当它是一个 php buildpack 时,我应该如何运行 express。

这是我的 package.json 脚本部分

"scripts": {
    "dev": "cross-env NODE_ENV=development webpack --config config/config.dev.js",
    "build": "cross-env NODE_ENV=production webpack --config config/config.prod.js",
    "start": "node server.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },

我的 procfile 是...

web: vendor/bin/heroku-php-apache2 public/

和我的构建包

$ heroku buildpacks
1. heroku/nodejs
2. heroku/php

当我在 heroku 上部署它时,我在 heroku 日志中没有收到编译错误,但我的 web 应用程序没有从 socket.io 服务器获得实时更新。 在浏览器的控制台日志中,http://myapp.herokuapp.com/socket.io/?EIO=3&transport=polling 出现 404 错误

我在这里做错了什么?

【问题讨论】:

  • 鉴于您的 web dyno 运行 php 进程,您的“npm start”脚本是如何触发的?
  • @YoniRabinovitch 我刚刚开始使用 Heroku,但我想拥有一个 nodejs buildpack 不会自动运行启动脚本。我还应该在这里做什么。任何指针都会有所帮助。
  • 如果你想运行 node/express web dyno,你需要在你的 procfile 中添加“web: npm start”。然而,听起来你想要一个 PHP Web 服务器,node/express 在不同的端口上监听。你不能在 Heroku 中真正做到这一点。相反,您的节点应用程序需要一个工作测功机。但是,您将无法通过 URL 从您的前端直接访问您的工作人员测功机。
  • @YoniRabinovitch 哦,好吧。这很有帮助。我已经搜索了一些关于添加工人测功机并使用它的信息。我猜我将需要使用像 redis 这样的通信中间件来解决你提到的无法从前端直接访问 worker dyno 的部分。
  • 是的,完全正确。如devcenter.heroku.com/articles/background-jobs-queueing中所述。

标签: php node.js heroku socket.io buildpack


【解决方案1】:

如果你想运行 node/express web dyno,你需要在你的 procfile 中使用web: npm start

但是听起来你想要一个 PHP Web 服务器,node/express 监听不同的端口。你不能在 Heroku 上真正做到这一点。相反,您的节点应用程序需要一个工作测功机。但是,您将无法通过 URL 从前端直接访问您的工作人员测功机。相反,您需要执行类似于here 描述的操作。

另见this answer

【讨论】:

    猜你喜欢
    • 2019-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    • 2012-04-14
    • 2019-12-24
    • 1970-01-01
    • 2013-01-14
    相关资源
    最近更新 更多