Reputation: 197
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
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