为啥我的 Flask 应用程序在 Heroku 上被检测为 node.js

Posted

技术标签:

【中文标题】为啥我的 Flask 应用程序在 Heroku 上被检测为 node.js【英文标题】:Why is my Flask app being detected as node.js on Heroku为什么我的 Flask 应用程序在 Heroku 上被检测为 node.js 【发布时间】:2013-12-08 21:16:10 【问题描述】:

我最近对托管在 heroku 上的 Flask 应用程序的结构进行了一些更改,现在 heroku 决定将其检测为 Node.js 应用程序而不是 Python 应用程序。我的应用程序同时使用 python (Flask) 作为后端 api 和 javascript 作为前端。

我所做的更改包括将 npm 和 bower 集成到我的应用程序中,以简化应用程序的 javascript 开发。

【问题讨论】:

我最终在谷歌上搜索了答案,并在 *** 上找到了一个类似的帖子,这让我找到了答案。我刚刚发布这个是为了给和我有同样问题的人提供一个更快的解决方案。 【参考方案1】:

package.json 文件导致 Heroku 将其检测为 node.js 应用程序。为防止出现这种情况,请将文件名添加到 .slugignore 文件中:

echo 'package.json' >> .slugignore
git add .slugignore

.slugignore 类似于.gitignore。它位于存储库的根目录中,应该包含文件名和通配符模式的列表。匹配的文件保留在您的 git 存储库中,但在您推送到 Heroku 后会从 slug 中删除。删除发生在 buildpack 运行之前,因此 node.js buildpack 不会找到 package.json 并且该应用不会被错误识别为 node.js 应用。

【讨论】:

这个解决方案更加优雅。【参考方案2】:

当我开始使用 npm 时,将package.json 添加到我的根目录时引入了问题。似乎构建检测脚本首先运行 nodejs 检测 (here),这导致此代码:if [ -f $1/package.json ]; then echo "Node.js" && exit 0 正在执行,Heroku 认为它是一个 nodejs 应用程序,并在 python 检测有机会运行之前退出。

为了解决这个问题,我必须手动告诉 Heroku 我想要一个使用这个命令的 python 构建

heroku config:set BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-python

【讨论】:

旁注:我最初在运行heroku config:set 命令(在 OS X 上)时遇到问题,因为我有一个过时的 heroku 工具带,通过在 toolbelt.heroku.com 上更新它很容易解决跨度> 这行得通;请注意,我必须推送另一个提交才能触发更改。 heroku 重启还不够

以上是关于为啥我的 Flask 应用程序在 Heroku 上被检测为 node.js的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的应用无法在 Heroku 上建立 websocket 连接?

为啥我的 Django 应用程序可以在本地运行,但不能在 Heroku 上运行?

为啥我的 sidekiq 计划的 cron 作业没有在 heroku 上运行?

Flask-Socketio 应用程序在 Heroku 上出现超时错误

在 Heroku 上部署 Flask Websockets 应用程序时遇到问题

Flask-SocketIO - WebSocket 在连接建立之前关闭。 [Heroku]