2011/6/9 hmepas <[email protected]>: > > > On Thu, Jun 9, 2011 at 2:37 PM, Anand Chitipothu <[email protected]> > wrote: >> >> 2011/6/9 hmepas <[email protected]>: >> > mod_wsgi / nginx 1.0.4 / web.py 0.35 >> > >> > I have debian server with actually old python version- Python 2.5.2 . >> > Tried to make web.py+nginx working thru mod_wsgi . (Why bother with >> > separated uwsgi wrapper if it's already in framework and server could >> > use it?) >> > So i recomplied nginx 1.0.4 from source applying latest version of >> > mod_wsgi from here >> > https://bitbucket.org/lifeeth/mod_wsgi/downloads >> > Used tip version which is patched for Python 2.6 which makes it's >> > incompatible with 2.5. So i revert /*tp_version_tag*/ change to make >> > it makeable on my python headers ;) >> > >> > So i am having nginx config like this: >> > ; ======== CONFIG START ======= >> > wsgi_python_executable /usr/bin/python; >> > >> > server { >> > listen 127.1:80; >> > server_name foo.bar; >> > root /foo/; >> > >> > include uwsgi_params; >> > location / { >> > wsgi_pass /foo/app.py; >> > } >> > } >> > ; END >> > >> > Once I aproach page thru nginx i am getting this errors in log: >> > *12 File "/foo/web/application.py", line 273, in wsgi >> > *12 if web.ctx.method.upper != web.ctx.method: >> > *12 AttributeError: 'NoneType' object has no attribute 'upper' >> > >> > I went to /foo/web/application.py and added >> > if not web.ctx.method: >> > web.ctx.method = "GET" >> > Before >> > if web.ctx.method.upper() != web.ctx.method: >> > raise web.nomethod() >> > >> > After that my script starts to work. But I wonder will it work on more >> > complicated cases for i.e. with POST request. Since I actually made a >> > hack. >> > Why web.ctx.method could be unset? Is it nginx mod_wsgi problem? Or >> > it's web.py wsgi representation thing? >> > >> > Any ideas? >> > >> > Script it'self pretty simple: >> > $ cat /foo/app.py >> > import sys, os >> > abspath = os.path.dirname(__file__) >> > sys.path.append(abspath) >> > import web >> > >> > urls = ( >> > '/(.*)', 'hello' >> > ) >> > >> > app = web.application(urls, globals()) >> > >> > class hello: >> > def GET(self, name): >> > if not name: >> > name = 'World' >> > return 'Hello, ' + name + '!' >> > >> > application = app.wsgifunc() >> >> Try this simple wsgi script to see if the problem is in web.py or the >> nginx setup. >> >> def application(environ, start_response): >> start_response("200 OK", [("Content-Type", "text/plain")]) >> return str(environ) >> >> See what is the value of HTTP_METHOD in the response. >> >> Anand >> >> -- >> You received this message because you are subscribed to the Google Groups >> "web.py" group. >> To post to this group, send email to [email protected]. >> To unsubscribe from this group, send email to >> [email protected]. >> For more options, visit this group at >> http://groups.google.com/group/webpy?hl=en. >> > > Thanks for such straight test. Not familiar with wsgi enouth do get that > myself. > So i did > > import pprint > > def application(environ, start_response): > start_response("200 OK", [("Content-Type", "text/plain")]) > pp = pprint.PrettyPrinter(indent=4) > return pp.pformat(environ) > > And got: > > 'HTTP_ACCEPT': > 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', > 'HTTP_ACCEPT_CHARSET': 'UTF-8,*', > > 'HTTP_ACCEPT_ENCODING': 'gzip,deflate', > 'HTTP_ACCEPT_LANGUAGE': 'ru,en-us;q=0.7,en;q=0.3', > 'HTTP_CACHE_CONTROL': 'max-age=0', > 'HTTP_CONNECTION': 'keep-alive', > > 'HTTP_COOKIE': 'some cookies was here', > 'HTTP_HOST': 'foo.bar', > 'HTTP_KEEP_ALIVE': '300', > 'HTTP_USER_AGENT': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; > rv:1.9.1.19) Gecko/20110420 SeaMonkey/2.0.14', > > 'PATH_INFO': '/', > 'SCRIPT_NAME': '', > 'ngx.POLLIN': 1, > 'ngx.POLLOUT': 4, > 'ngx.connection_wrapper': <built-in method connection of ngx_wsgi.State > object at 0x7fff215fd2b0>, > > 'ngx.poll': <built-in method poll of ngx_wsgi.State object at > 0x7fff215fd2b0>, > 'ngx.poll_register': <built-in method register of ngx_wsgi.State object > at 0x7fff215fd2b0>, > 'ngx.poll_unregister': <built-in method unregister of ngx_wsgi.State > object at 0x7fff215fd2b0>, > > 'wsgi.errors': <ngx_wsgi.Log object at 0x7fff215b20f0>, > 'wsgi.file_wrapper': <built-in method file of ngx_wsgi.State object at > 0x7fff215fd2b0>, > 'wsgi.input': <cStringIO.StringI object at 0x7fff215d44e0>, > > 'wsgi.multiprocess': True, > 'wsgi.multithread': False, > 'wsgi.run_once': False, > 'wsgi.url_scheme': 'http', > 'wsgi.version': (1, 0)} > > So NO, no HTTP_REQUEST. But i have those variables in nginx config. > What's that's means? Nginx-mod_wsgi malfunctioning or it's python wsgi > implementation problem?
The nginx+mod_wsgi is supposed to provide REQUEST_METHOD in the environ to the wsgi function. http://www.python.org/dev/peps/pep-0333/#environ-variables Looks like your nginx+mod_wsgi is malfunctioning. -- You received this message because you are subscribed to the Google Groups "web.py" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/webpy?hl=en.
