首页 文章

如何在Apache2上使用WSGI部署Flask时解决导入错误

提问于
浏览
35

我有一个问题是使用wsgi在apache2上部署烧瓶应用程序 . 我已经在下面发布了错误日志和配置文件 . 我试过移动东西,重命名它们等,但都给了我一个内部服务器错误 . 不知道为什么我收到导入错误 . 任何意见/建议表示赞赏,谢谢!

这是我的apache error.log

[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 回答

  • 32

    感谢#pocoo的irc.freenode.org上的 zarfdamjan ,他们能够帮助我解决这个问题 . 问题是PythonPath不正确 . 我们使用以下wsgi.py修复此问题

    import sys
    sys.path.insert(0, "/sites/flaskfirst")
    
    from app import app
    application = app
    
  • 5

    我使用你的解决方案让它工作,但它一直在sys.path中复制路径(你可以写出来看看它是否发生在你身上)所以我做了一点修改:

    import sys
    flaskfirst = "/sites/flaskfirst"
    if not flaskfirst in sys.path:
        sys.path.insert(0, flaskfirst)
    
    from app import app
    application = app
    

    这样它只包含一次

相关问题