如何在Apache2上使用WSGI部署Flask时解决导入错误
我在用wsgi把一个flask应用部署到apache2上时遇到了问题。我把错误日志和配置文件都贴在下面了。我尝试过移动文件、重命名等等,但都出现了内部服务器错误。我不明白为什么会出现导入错误。任何建议或意见都非常感谢!
这是我的apache错误日志
[Sun Sep 12 20:47:59 2010] [error] [client] mod_wsgi (pid=9753): Target WSGI script '/sites/flaskfirst/wsgi.py' cannot be loaded as Python module.
[Sun Sep 12 20:47:59 2010] [error] [client] mod_wsgi (pid=9753): Exception occurred processing WSGI script '/sites/flaskfirst/wsgi.py'.
[Sun Sep 12 20:47:59 2010] [error] [client] Traceback (most recent call last):
[Sun Sep 12 20:47:59 2010] [error] [client] File "/sites/flaskfirst/wsgi.py", line 1, in <module>
[Sun Sep 12 20:47:59 2010] [error] [client] from app import app as application
[Sun Sep 12 20:47:59 2010] [error] [client] ImportError: No module named app
wsgi.py文件内容
# This is wsgi.py
from app import app as application
app.py文件内容
# This is app.py
from flask import Flask, render_template
import settings
app = Flask(__name__)
app.debug = settings.DEBUG
from views.homepage import *
from views.events import *
from views.submit import *
from views.feed import *
if __name__ == "__main__":
app.run()
这里是目录结构的基本情况,给你一个大概念。
/flaskfirst/
/static/
/templates/
/views/
__init__.py
app.py
wsgi.py
这是apache的虚拟主机配置文件
<VirtualHost *:80>
ServerAdmin sreustle@gmail.com
ServerName crath.org
DocumentRoot /sites/flaskfirst
# WSGI Settings
WSGIScriptAlias / /sites/flaskfirst/wsgi.py
WSGIDaemonProcess flaskfirst user=sreustle group=general processes=1 threads=10
WSGIProcessGroup flaskfirst
# Static Directories
Alias /static /sites/flaskfirst/static/
<Location "/static">
SetHandler None
</Location>
</VirtualHost>
2 个回答
4
我用了你的方法让它正常工作了,但它在sys.path里一直重复添加路径(你可以试着打印出来看看是不是这样),所以我做了一点小修改:
import sys
flaskfirst = "/sites/flaskfirst"
if not flaskfirst in sys.path:
sys.path.insert(0, flaskfirst)
from app import app
application = app
这样的话,它就只会被添加一次了。
32
感谢zarf
和damjan
在irc.freenode.org的#pocoo频道,他们帮我解决了这个问题。问题出在Python的路径设置不正确。我们通过使用下面的wsgi.py文件来修复这个问题。
import sys
sys.path.insert(0, "/sites/flaskfirst")
from app import app
application = app