Flask,mod_wsgi和Apache:ImportError

时间:2012-11-11 07:22:37

标签: python apache flask mod-wsgi

我在错误日志中得到了这个:

  

ImportError:没有名为flask的模块

它看起来与Django + mod_wsgi + apache: ImportError at / No module named djproj.urls完全一样,但是我尝试了这个解决方案,它似乎不起作用......我正在将app home和parent文件夹正确插入系统路径,但是这个错误是还在上升。

导航到我的页面仍然会显示500页。

更多信息:我正在使用Amazon EC2免费套餐,以httpd形式使用Apache。一切都安装正确,我很确定......

这是我的东西(应用程序名称​​ badassery 和应用程序主文件夹名称​​ hatemail - 我改变了我的想法):

错误日志

[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148] mod_wsgi (pid=28143): Target WSGI script '/home/ec2-user/hatemail/badassery.wsgi' cannot be loaded as Python module.
[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148] mod_wsgi (pid=28143): Exception occurred processing WSGI script '/home/ec2-user/hatemail/badassery.wsgi'.
[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148] Traceback (most recent call last):
[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148]   File "/home/ec2-user/hatemail/badassery.wsgi", line 6, in <module>
[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148]     from badassery import app as application
[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148]   File "/home/ec2-user/hatemail/badassery.py", line 6, in <module>
[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148]     from flask import Flask, request, session, url_for, redirect, render_template, abort, g, flash, _app_ctx_stack
[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148] ImportError: No module named flask
[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148] mod_wsgi (pid=28143): Target WSGI script '/home/ec2-user/hatemail/badassery.wsgi' cannot be loaded as Python module.
[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148] mod_wsgi (pid=28143): Exception occurred processing WSGI script '/home/ec2-user/hatemail/badassery.wsgi'.
[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148] Traceback (most recent call last):
[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148]   File "/home/ec2-user/hatemail/badassery.wsgi", line 6, in <module>
[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148]     from badassery import app as application
[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148]   File "/home/ec2-user/hatemail/badassery.py", line 6, in <module>
[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148]     from flask import Flask, request, session, url_for, redirect, render_template, abort, g, flash, _app_ctx_stack
[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148] ImportError: No module named flask

badassery.wsgi

import sys

sys.path.insert(0,'/home/ec2-user/hatemail')
sys.path.insert(1,'/home/ec2-user')

from badassery import app as application

添加到httpd.conf文件

WSGISocketPrefix /var/run/wsgi

<VirtualHost *:80>
        ServerName 54.243.61.41
        DocumentRoot "/home/ec2-user/hatemail"

        WSGIDaemonProcess badassery user=apache group=apache processes=1 threads=5
        WSGIScriptAlias / /home/ec2-user/hatemail/badassery.wsgi
        WSGIScriptReloading On

        <Directory /home/ec2-user/hatemail>
                WSGIProcessGroup badassery
                WSGIApplicationGroup %{GLOBAL}
                Order deny,allow
                Allow from all
        </Directory>
</VirtualHost>

目录结构

~
    hatemail
        badassery.py
        badassery.wsgi
        Procfile
        README
        requirements.txt
        schema.sql
        static/
        templates/
        venv/bin/activate

是的,我正在“如果名称 =='main':app.run()”。

如何解决此问题?

2 个答案:

答案 0 :(得分:13)

如果您正在部署virtualenv,则必须先确保将其激活。您应该像这样更新您的wsgi文件(更新值以匹配您的环境):

activate_this = '/path/to/virtualenv/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this)

import sys
sys.path.insert(0, '/path/to/flask/appname')
sys.path.insert(0,'/home/ec2-user/hatemail')
sys.path.insert(1,'/home/ec2-user')

from badassery import app as application

如果您没有部署virtualenv,您可能只需要确保在系统上安装了Flask。如果您已经安装了setuptools,那么您可以:

easy_install flask

答案 1 :(得分:3)

如果在使用wsgi_mod时导入时遇到任何问题,请确保尝试明确指向导致问题的导入文件:

sys.path.append('/home/foo/www/Forms')

然后进行导入!