5

我已经为我正在构建的应用程序配置了一个 vagrant box,但是在尝试让 Apache 为其提供服务时遇到了麻烦。

它为它的包使用了一个 virtualenv——现在这只是 Flask 和它的依赖项,这一切都很好。我可以通过 SSH 在环境中运行应用程序。该应用程序本身只是目前的最小应用程序

阿帕奇错误

[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

文件

/vagrant
├── env
└── myapp
    ├── app.py
    └── myapp.wsgi

我的应用程序.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

默认站点虚拟主机

<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>

我尝试使用用户和组运行 Apache,并将vagrant站点包和应用程序目录更改为www-data. 我还尝试将 WSGIDaemon 用户和组更改为 vagrant。

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

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

我难住了。

4

2 回答 2

9

我遇到的问题在 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

请注意,最后一行已从import app as application.

于 2013-03-31T14:28:48.100 回答
0

可能出现这个问题是因为您使用共享文件夹作为应用程序源代码的存储空间,该文件系统的行为与普通 ext3/4 有点不同,因此 Apache 和/或chown在涉及到更多问题时会遇到问题文件复制...

编辑:虽然我只是一个 python 初学者,但TypeError: 'module' object is not callable可以帮助你解决问题

于 2013-03-31T14:06:36.387 回答