anu.agg
anu.agg

Reputation: 197

Response from WSGI application gets downloaded in browser instead of getting displayed

I'm trying to host a WSGI application (written in webpy, hosted on Apache) on Ubuntu server. Whenever I run my application, the JSON response gets downloaded instead of getting displayed in the browser. The same application is however working fine on localhost. Here is the code of the WSGI application (taken from 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()     

My apache configuration settings are -

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>   

When from the browser, I go to www.mywebsite.com/project/ then a file with "Hello, World!" written in it gets downloaded.

However, when I go to www.mywebsite.com/project then I get the message "Not Found"

Upvotes: 2

Views: 692

Answers (1)

olly_uk
olly_uk

Reputation: 11865

with regard to the Not Found issue, i think the fact that the url mapping starts with a slash forces the use of a slash after the path specified in the WSGIScriptAlis entry in the apache conf.

as the wsgi app will try to do a lookup for a url that is completely blank if no slash is used in the url. this could be solved two ways. for the initial testing you could change the URL map to

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

or you could use mod_Rewrite to always append a slash after the path, have a look here Add Trailing Slash to URLs

with regard to the file being downloaded instead of displayed in browser i would suggest that you could use some browser debugging tools like firebug or chrome developer tools to check what the content-type of the 'hello world' return is. There should be a way in web.py to set the content type. see here for a way to set the content-type webpy: How to serve JSON

hope some of that helps

Upvotes: 2

Related Questions