我正在尝试在Apache共享托管服务器中部署一个简单的烧瓶应用程序。
我不确定这里有什么问题。
我现在卡在.cgi
文件中。
烧瓶app - 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, 请建议。
谢谢!
答案 0 :(得分:0)
我认为在cgi的帮助下,你对apache如何使用烧瓶有两大误解。
Apache使用系统directorys作为python解释器。实际上,您可以更改sys.path Like here descriped。但这远非理想。
您不必为您的cgi文件调用python。当您正确配置
in the cgi doc of flask是让服务器使用cgi文件的一些方法。
由于您说您希望它在共享主机上传,因此您需要的.htaccess
文件是最常用的方式,因为大多数服务只允许您使用公共目录。在这种情况下,您还必须使用python在服务器上的共享托管服务器,或者希望安装python以及您需要的所有软件包,因为您无法自行安装任何软件包。
您可以尝试changing of the interpreter path,但如果可以在共享托管上使用,我没有经验。
答案 1 :(得分:0)
我必须在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')
文件中添加了这些行:
{{1}}
请参阅 - https://medium.com/@mohdejazsiddiqui/deploy-flask-app-in-apache-shared-hosting-5b3c82c8fd5e