我制作了一个使用 Python CGI 脚本的简单应用程序。我有一个可用的本地版本(适用于 lighttpd),但现在我想将它上传到 Heroku。该应用程序由 2 或 3 个脚本组成,它们对文件进行操作并将信息打印回浏览器,因此我认为除了 CGI 之外我不需要任何模块。
但是Heroku 文档只解释了如何使用精美的 Web 框架上传 Python 应用程序,而我没有使用其中任何一个。
我想知道是否可以在 Heroku 上运行 CGI 脚本,如果可以,该怎么做。
Heroku Cedar 以自托管 Web 应用程序为中心,因此您需要能够将应用程序捆绑在一起并将其作为单个命令运行。
我认为最简单的方法是将您的应用程序移植到 Flask。它不是很复杂,特别是如果它只有 2 或 3 个脚本。
另一种选择(取决于您的性能要求)是使用Python 标准库和Python buildpack中的简单CGI 服务器。我认为您需要将脚本捆绑在 ./cgi-bin 目录中并使用以下命令启动服务器(在 procfile 中):
web: bin/python -m CGIHTTPServer $PORT
最复杂的方法是将 lighttpd 和你的脚本捆绑在一起,然后编写一个 shell 脚本来启动它。您必须确保您编译的二进制文件与 Heroku 兼容。我会以PHP buildpack为起点。
我向 Heroku 支持人员询问了我尝试在 Heroku 平台上提供的 cgi 应用程序,以下是回复:
你好,
不幸的是,我们不支持 CGI 风格的应用程序,只支持纯 Python 的应用程序。您可能会更幸运地使用 Python CGIHTTPServer 模块,但如果它不适合您的需求,您可能会不走运。
要添加到最佳答案,对于 Python 3,中的命令Procfile
应该是这个。
web: python -m http.server --cgi $PORT