将 Flask 应用程序部署到 Apache 共享主机

Deploying flask app to Apache shared hosting

我正在尝试在 Apache 共享托管服务器中部署一个简单的 flask 应用程序。

我不确定这里有什么问题。

我现在卡在 .cgi 文件中了。

烧瓶应用程序 - hello.py:

#!/usr/bin/python

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!\n"

if __name__ == "__main__":
    app.run()

myapp.cgi 文件:

#!/usr/bin/python  

import os
from wsgiref.handlers import CGIHandler
from hello import app


os.environ['SERVER_NAME'] = '127.0.0.1'
os.environ['SERVER_PORT'] = '5000'
os.environ['REQUEST_METHOD'] = 'GET'
os.environ['PATH_INFO'] = ""

CGIHandler().run(app)

两个文件都放在/home/username/public_html/cgi-bin目录下

同一个 cgi-bin 的目录名为 myenv - 这是我创建的 virtualenvvirtualenv 已激活。

现在,

我导航到 cgi-bin 目录并 运行 -

 python hello.py

我明白了:

* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

所以这很好。现在我 运行 正在 myapp.cgi 文件:

python myapp.cgi

我明白了:

Status: 301 MOVED PERMANENTLY
Content-Type: text/html; charset=utf-8
Content-Length: 251
Location: http://127.0.0.1:5000/

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>Redirecting...</title>
<h1>Redirecting...</h1>
<p>You should be redirected automatically to target URL: <a href="http://127.0.0.1:5000/">http://127.0.0.1:5000/</a>.  If not click the link.

如何使此状态为 200 OK, 请提出建议。

谢谢!

我认为你对apache如何借助cgi与flask协同工作存在两大误解。

  1. Apache 使用 python 解释器的系统目录。您实际上可以更改 sys.path Like here descriped。但这远非理想。

  2. 您不必为您的 cgi 文件调用 python。当您正确配置后,服务器将执行此操作

in the cgi doc of flask 是让服务器使用 cgi 文件的一些方法。

既然你说你希望它在共享主机上上传,那么根据你的需要编写一个 .htaccess 文件将是最有前途的方式,因为大多数这些服务只允许你从你的 public 目录。在这种情况下,您还必须使用 python 在服务器上的共享主机,或者愿意安装 python 以及您需要的所有软件包,因为您无法自己安装任何软件包.

您可以尝试 changing of the interpreter path,但我不知道这是否适用于共享主机。

我不得不在 .cgi 文件中做一些改动。下面是最终文件。

import os
from wsgiref.handlers import CGIHandler
from hello import app


CGIHandler().run(app)

并在我的 hello.py 文件中添加了这些行:

import os
import sys
sys.path.insert(0, '/home/username/public_html/cgi-bin/myenv/lib/python2.6/site-packages') 

参考这个 - https://medium.com/@mohdejazsiddiqui/deploy-flask-app-in-apache-shared-hosting-5b3c82c8fd5e