【问题标题】:Response from WSGI application gets downloaded in browser instead of getting displayed来自 WSGI 应用程序的响应在浏览器中下载而不是显示
【发布时间】:2012-02-18 12:35:03
【问题描述】:

我正在尝试在 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 时,我会收到“未找到”消息

【问题讨论】:

    标签: python mod-wsgi web.py


    【解决方案1】:

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

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

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

    或者你可以使用 mod_Rewrite 在路径后添加一个斜杠,看看这里Add Trailing Slash to URLs

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

    希望对你有所帮助

    【讨论】:

    • 感谢 olly_uk。这解决了这两个问题。我的错,我没有返回 json 对象,而是返回了一个字符串,因为它没有显示在浏览器中。
    • 谢谢,没有问题只是检查你不需要任何帮助:-)
    猜你喜欢
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多