将 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
- 这是我创建的 virtualenv
。 virtualenv
已激活。
现在,
我导航到 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协同工作存在两大误解。
Apache 使用 python 解释器的系统目录。您实际上可以更改 sys.path Like here descriped。但这远非理想。
您不必为您的 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
我正在尝试在 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
- 这是我创建的 virtualenv
。 virtualenv
已激活。
现在,
我导航到 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协同工作存在两大误解。
Apache 使用 python 解释器的系统目录。您实际上可以更改 sys.path Like here descriped。但这远非理想。
您不必为您的 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