2012-04-23 56 views
2

我试图运行一个用Flask微框架开发的非常简单的Python web应用程序。我正在使用Ubuntu 10.04 LTS的VPS。我遵循this instructions以获得舒适的“Hello world!”,这是一次成功的体验。但是现在,我正在设置一个稍微复杂一点的配置,并且无法正常工作。使用mod_wsgi在Apache上运行最简单的Flask应用程序的一些问题

我的应用程序的Apache虚拟主机配置是:

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    ServerName domain.com 
    ServerAlias www.domain.com 

    DocumentRoot /srv/www/domain.com/public_html/ 

    LogLevel info # I've put this for debugging purposes. 
    ErrorLog /srv/www/domain.com/logs/error.log 
    CustomLog /srv/www/domain.com/logs/access.log combined 

    WSGIDaemonProcess username user=username group=username threads=5 processes=5 
    WSGIScriptAlias /myapplication/  /srv/www/domain.com/myapplication/myapplication.wsgi 

    <Directory /srv/www/domain.com/myapplication/myapplication> 
     WSGIProcessGroup username 
     WSGIApplicationGroup %{GLOBAL} 
     Order deny,allow 
     Allow from all 
    </Directory> 

    Alias /css /srv/www/domain.com/public_html/css 
    Alias /js /srv/www/domain.com/public_html/js 
    Alias /images /srv/www/domain.com/public_html/images 
</VirtualHost> 

我的WSGI配置文件是:

# -*- coding: utf-8 -*- 
from myapplication import app as application 

这是什么毛病上述配置?

最后,Apache给了我一个500错误页面。所以,我检查日志:

[info] mod_wsgi (pid=3132, process='', application='domain.com|/myapplication/'): Loading WSGI script '/srv/www/domain.com/myapplication/myapplication.wsgi'. 
[error] mod_wsgi (pid=3132): Target WSGI script '/srv/www/domain.com/myapplication/myapplication.wsgi' cannot be loaded as Python module. 
[error] mod_wsgi (pid=3132): Exception occurred processing WSGI script '/srv/www/domain.com/myapplication/myapplication.wsgi'. 
[error] Traceback (most recent call last): 
[error] File "/srv/www/domain.com/myapplication/myapplication.wsgi", line 3, in <module> 
[error] from myapplication import app as application 
[error] ImportError: No module named myapplication 

树结构类似于此:

/myapplication 
    myapplication.wsgi 
    myapplication (python package) 

显然,Python中找不到myapplication模块中sys.path。但我已经检查过版画,它就在那里。我知道这个问题可能是微不足道的解决,但我有点困惑。我怎么能在正确的方向上解决这个问题?

+0

只是没问题,如果你明确地在'myapplication.wsgi'中设置'sys.path',它是否工作? – larsks 2012-04-23 20:14:06

+0

@larsks哦。有效!非常感谢!现在我试图弄清楚这怎么可能。当然,现在我遇到了其他问题,比如路由。对'/'的请求可以正常工作,但是任何“低于”(例如/ login)都不会。我[看了看](http://stackoverflow.com/questions/9680073/how-do-i-use-flask-routes-with-apache-and-mod-wsgi)解决方案,我已经打电话了我的应用对象正确!我应该更新我的问题。 – 2012-04-23 20:22:38

+0

你可能应该开一个新的问题。另外,请注意,我既不是烧瓶也不是WSGI专家;可能会有更好的地方设置Python的搜索路径。 – larsks 2012-04-23 20:24:29

回答

3

@larsks指出我一个时间,但工作的解决方案。现在,myapplication.wsgi样子:

import os 
import sys 

sys.path.append('/srv/www/domain.com/myapplication/') 
os.environ['PYTHON_EGG_CACHE'] = '/srv/www/domain.com/myapplication/.python-egg' 

from myapplication import app as application 

谢谢!

相关问题