>>
>> From: "Roberto De Ioris" <[email protected]>
>>
>> One of my customer is doing this to force django loading on startup:
>>
>> from django.core.handlers.wsgi import WSGIHandler
>>
>> application = WSGIHandler()
>>
>> # generate a fake request
>> application({'REQUEST_METHOD':'GET', 'PATH_INFO':'/',
>> 'SERVER_NAME':'foobar'}, uwsgi.start_response)
>>
>>
>> I do not remember if some other variable is needed, you can eventually
>> add
>> them in the dictionary if you receive an error.
>>
>>
> I tried this in my setup, but the worker segfaults without informative
> logging, when Django's WSGIHandler calls the uwsgi.start_response
> function.
>
> I added print statements around that call:
>
> print "Django WSGIHandler calling start_response with status %s
> and
> headers:\n%s" % (status, pformat(response_headers))
> start_response(status, response_headers)
> print "Django WSGIHandler ...called start_response"
>
> and in the uwsgi log I get:
>
> Django WSGIHandler calling start_response with status 200 OK and headers:
> [('X-DataMarket-API-Hits', '0'),
> ('Vary', 'Cookie'),
> ('X-DataMarket-UserID', '5'),
> ('Content-Type', 'application/javascript; charset=utf-8'),
> ('Content-Language', 'en')]
> removed uwsgi instance test.ini
>
> (and the "called start_response" line never comes)
>
> and in /var/log/messages I get one of these for each worker crash:
>
> uwsgi[29048]: segfault at 0 ip 08084b4b sp bff974f0 error 6 in
> uwsgi[8048000+57000]
>
> (pid and sp differs, of course, but the other stuff is constant)
>
> I copied the whole environ dictionary sent by uwsgi in a normal wsgi
> invocation, replacing wsgi.input and wsgi.errors with cStringIO.StringIO
> instances, so I don't think there is anything wrong with my application
> invocation. Still posting it below.
>
> I was running latest stable, 0.9.9.2, as emperor with two vassals, when I
> tried this out and saw it fail. Tried going to 1.0-rc6, and simplified to
> one vassal to make logs clearer; same problem.
>
> It seems to me like uwsgi is not ready to receive the start_response call
> right at the time of loading the wsgi application (and it does not express
> its unreadiness very politely :) ).
>
> Regards,
>
> - Gulli
>
>
>
>
> import django.core.handlers.wsgi
>
> application = django.core.handlers.wsgi.WSGIHandler()
>
> try:
> import uwsgi
> except:
> pass
> else:
> try:
> import cStringIO
> input = cStringIO.StringIO()
> errors = cStringIO.StringIO()
> print 'TESTING: calling application'
> application(
> {
> 'CONTENT_LENGTH': '',
> 'CONTENT_TYPE': '',
> 'DOCUMENT_ROOT': '/usr/local/nginx/html',
> 'HTTP_ACCEPT':
> 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
> 'HTTP_ACCEPT_CHARSET': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
> 'HTTP_ACCEPT_ENCODING': 'gzip,deflate,sdch',
> 'HTTP_ACCEPT_LANGUAGE': 'en-US,en;q=0.8',
> 'HTTP_CONNECTION': 'keep-alive',
> 'HTTP_HOST': 'test.datamarket.com',
> 'HTTP_USER_AGENT': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2)
> AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.41 Safari/535.7',
> 'PATH_INFO': '/api/v1/info.json',
> 'QUERY_STRING': 'ds=c',
> 'REMOTE_ADDR': '167.177.112.172',
> 'REMOTE_PORT': '65420',
> 'REQUEST_METHOD': 'GET',
> 'REQUEST_URI': '/__ping__',
> 'SERVER_NAME': 'mytest.com',
> 'SERVER_PORT': '80',
> 'SERVER_PROTOCOL': 'HTTP/1.1',
> 'uwsgi.node': 'itchy',
> 'uwsgi.version': '1.0-dev',
> 'wsgi.multiprocess': True,
> 'wsgi.multithread': False,
> 'wsgi.run_once': False,
> 'wsgi.url_scheme': 'http',
> 'wsgi.version': (1, 0),
> 'wsgi.input': input,
> 'wsgi.errors': errors,
> },
> uwsgi.start_response)
> except:
> print 'TESTING: got exception'
> import traceback
> traceback.print_exc()
> else:
> print 'TESTING: survived application call'
> finally:
> print 'TESTING: reached finally clause'
> import traceback
> traceback.print_exc()
Sorry i do know why i used uwsgi.start_response :)
you can use a simple
def fake_sr(status, hh, exc_info=None):
pass
function instead of a real start_response, as you have no peer to send
data to
--
Roberto De Ioris
http://unbit.it
_______________________________________________
uWSGI mailing list
[email protected]
http://lists.unbit.it/cgi-bin/mailman/listinfo/uwsgi