2013-03-31 62 views
3

我爲正在構建的應用程序提供了一個流浪盒,但在嘗試讓Apache服務時遇到了麻煩。Vagrant,WSGI,virtualenv和TypeError:'模塊'對象不可調用

它使用virtualenv作爲它的包 - 現在只是Flask和它的依賴關係,並且這一切都正常工作。我可以通過SSH進入並在env中運行應用程序。該應用程序本身現在只是minimal application

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 

文件

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

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 

默認網站的虛擬主機

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

我試着與用戶和組vagrant運行Apache和chowning的站點包和應用程序目錄,以www-data。我也嘗試將WSGIDaemon用戶和組更改爲流浪。

我試過將網站包添加到路徑中,並且我嘗試將__init__.py添加到myapp並將myapp.wsgi更改爲from myapp import app as application

該應用程序可以使用source ../env/bin/activate && python app.py運行。

我很難過。

回答

5

我的問題是在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更改。

+0

<3謝謝!翻轉interwebz顛倒獲得python3 +燒瓶+ pyvenv工作,這釘我最後一個問題:) –

0

也許這個問題的產生是因爲你正在使用一個共享文件夾作爲你的應用程序源代碼的存儲,這個文件系統的行爲與普通的ext3/4有點不同,所以Apache和/或chown在它出現問題時涉及到的不僅僅是文件複製...

編輯:雖然我只是一個初學者蟒也許TypeError: 'module' object is not callable可以幫助你解決問題

相關問題