我一直在阅读指南here,但我无法在Bluehost上部署Flask。
以下是venv中安装的软件包:
Flask - 0.10.1 - active
Jinja2 - 2.7.2 - active
MarkupSafe - 0.21 - active
Python - 2.7.3 - non-active development (/usr/local/lib/python2.7/lib-dynload)
Python - 2.7.6 - active development (/usr/local/lib/python2.7/lib-dynload)
Werkzeug - 0.9.4 - active
flup - 1.0.2 - active
itsdangerous - 0.24 - active
pip 1.5.4 has no metadata
setuptools 2.2 has no metadata
wsgiref - 0.1.2 - active development (/usr/local/lib/python2.7)
yolk - 0.4.3 - active
我的.htaccess文件在public_html:
Options +ExecCGI
AddHandler fcgid-script .fcgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ flask_hello_world.fcgi/$1 [QSA,L]
flask_hello_world.fcgi,也在public_html中:
#!/home/REDACTED/venv/flask_hello_world/bin/python
from flup.server.fcgi import WSGIServer
from flask_hello_world_app import app as application
WSGIServer(application).run()
flask_hello_world_app.py文件,也在public_html中:
from datetime import datetime
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
@app.route('/the-time')
def the_time():
cur_time = str(datetime.now())
return cur_time + ' is the current time! ...YEAH!'
if __name__ == '__main__':
app.run()
执行flask_hello_world.fcgi时输出如下:
WSGIServer: missing FastCGI param REQUEST_METHOD required by WSGI!
WSGIServer: missing FastCGI param SERVER_NAME required by WSGI!
WSGIServer: missing FastCGI param SERVER_PORT required by WSGI!
WSGIServer: missing FastCGI param SERVER_PROTOCOL required by WSGI!
Status: 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 12
Hello World!Unhandled exception in thread started by
sys.excepthook is missing
lost sys.stderr
Unhandled exception in thread started by
sys.excepthook is missing
lost sys.stderr
Unhandled exception in thread started by
sys.excepthook is missing
lost sys.stderr
Unhandled exception in thread started by
sys.excepthook is missing
lost sys.stderr
Unhandled exception in thread started by
sys.excepthook is missing
lost sys.stderr
使用python解释器执行flask_hello_world.fcgi时输出如下:
Traceback (most recent call last):
File "flask_hello_world.fcgi", line 4, in <module>
from flask_hello_world_app import app as application
File "/home/REDACTED/public_html/flask_hello_world/flask_hello_world_app.py", line 2, in <module>
from flask import Flask
File "/usr/lib/python2.6/site-packages/flask/__init__.py", line 19, in <module>
from jinja2 import Markup, escape
ImportError: No module named jinja2
Apache错误日志如下:
[Tue Apr 22 19:56:19 2014] [warn] [client xxx] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server
[Tue Apr 22 19:56:19 2014] [error] [client xxx] Premature end of script headers: flask_hello_world.fcgi
[Tue Apr 22 19:56:19 2014] [error] [client xxx] exec used but not allowed in /home/REDACTED/public_html/500.shtml
我过去已经成功部署了Flask,所以此刻我有点不知所措。我想我错过了一些简单的东西,任何帮助都会受到赞赏。
编辑:这是一个权限/所有权问题,我发现我检查了suexec日志。
答案 0 :(得分:1)
除了显而易见的是Jinja2 REALY安装,我的赌注是你的mod_wsgi找不到你的virtualenv。这可以解释Jinja2环境错误。
在mod_wsgi(Apache) deployment doc
的非常底部如果你想使用mod_wsgi的虚拟环境,你必须这样做 稍微修改你的.wsgi文件。
将以下行添加到.wsgi文件的顶部:
activate_this =&#39; /path/to/env/bin/activate_this.py'
execfile(activate_this,dict( file = activate_this))
这设置了 根据虚拟环境的设置加载路径。 <强>保持 请记住,路径必须是绝对的。