Vagrant,WSGI,virtualenv和TypeError:'module'对象不可调用

Wil*_*Wil 4 python apache mod-wsgi virtualenv vagrant

我为我正在构建的应用程序配置了一个流浪盒,但是在尝试让Apache服务时我遇到了麻烦.

它正在使用virtualenv它的软件包 - 现在只是Flask和它的依赖项,而且一切正常.我可以通过SSH进入并在环境中运行应用程序.该应用程序本身只是目前最小的应用程序.

Apache错误

[Sun Mar 31 10:06:54 2013] [error] [client 10.0.2.2] mod_wsgi (pid=1587): Exception occurred processing WSGI script '/vagrant/myapp/myapp.wsgi'.
[Sun Mar 31 10:06:54 2013] [error] [client 10.0.2.2] TypeError: 'module' object is not callable
Run Code Online (Sandbox Code Playgroud)

/vagrant
??? env
??? myapp
    ??? app.py
    ??? myapp.wsgi
Run Code Online (Sandbox Code Playgroud)

myapp.wsgi

activate_this = '/vagrant/env/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))

import sys
sys.path.insert(0, '/vagrant/myapp')

import app as application
Run Code Online (Sandbox Code Playgroud)

默认站点vhost

<VirtualHost *:80>

        WSGIDaemonProcess myapp user=www-data group=www-data threads=5
        WSGIScriptAlias / /vagrant/myapp/myapp.wsgi

        <Directory /vagrant/myapp>
                WSGIProcessGroup myapp
                WSGIApplicationGroup %{GLOBAL}
                Order deny,allow
                Allow from all
        </Directory>

        ErrorLog /var/log/apache2/error.log

</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

我尝试用用户和组运行Apache,并将vagrantsite-packages和app目录添加到www-data.我也尝试将WSGIDaemon用户和组更改为vagrant.

我已经尝试将网站包添加到路径中,我已经尝试添加__init__.py到myapp并更改myapp.wsgifrom myapp import app as application.

该应用程序可以运行source ../env/bin/activate && python app.py.

我很难过.

Wil*_*Wil 6

我遇到的问题是在wsgi文件中,因为我导入的是应用程序包而不是其中的类(因为它们被命名为相同而被捕获.)

activate_this = '/vagrant/env/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))

import sys
sys.path.insert(0, '/vagrant/myapp')

from app import app as application
Run Code Online (Sandbox Code Playgroud)

注意最后一行已经改变了import app as application.