WSGI应用程序的响应在浏览器中下载而不是显示

时间:2012-01-25 10:05:11

标签: python mod-wsgi web.py

我正在尝试在Ubuntu服务器上托管一个WSGI应用程序(用webpy编写,托管在Apache上)。每当我运行我的应用程序时,都会下载JSON响应,而不是在浏览器中显示。但是,相同的应用程序在localhost上正常工作。以下是WSGI应用程序的代码(取自http://library.linode.com/frameworks/webpy/ubuntu-10.04-lucid) -

import web
import os
import sys
app_path = os.path.dirname(__file__)
sys.path.append(app_path)
os.chdir(app_path)
urls = ('/(.*)', 'hello')

web.debug = False # You may wish to place this in a config file
app = web.application(urls, globals(), autoreload=False)
application = app.wsgifunc() # needed for running with apache as wsgi

class hello:        
    def GET(self, name):
          if not name: 
               name = 'World'
        return 'Hello, ' + name + '!'

if __name__ == "__main__":
     app.run()     

我的apache配置设置是 -

WSGIScriptAlias /project /var/www/mywebsite.com/htdocs/project/main.py
<Directory /var/www/mywebsite.com/htdocs/project>
    Order deny,allow
    Allow from all
    SetHandler wsgi-script
    Options ExecCGI
</Directory>   

当我从浏览器访问www.mywebsite.com/project/时会看到一个带有“Hello,World!”的文件。写在里面下载。

然而,当我访问www.mywebsite.com/project时,我收到消息“Not Found”

1 个答案:

答案 0 :(得分:2)

关于Not Found问题,我认为url映射以斜杠开头的事实强制在apache conf中的WSGIScriptAlis条目中指定的路径之后使用斜杠。

因为如果网址中没有使用斜杠,wsgi应用程序将尝试查找完全空白的网址。这可以通过两种方式解决。对于初始测试,您可以将URL映射更改为

urls = ('(.*)', 'hello')

或者您可以使用mod_Rewrite始终在路径后附加斜杠,看看Add Trailing Slash to URLs

关于正在下载的文件而不是在浏览器中显示我建议您可以使用一些浏览器调试工具(如firebug或chrome开发人员工具)来检查“hello world”返回的内容类型是什么。 web.py中应该有一种方法来设置内容类型。请参阅此处了解设置内容类型webpy: How to serve JSON

的方法

希望其中一些有帮助