[IronPython] IronPython/NWSGI 0-byte 200/404 response with HelloWorld?

Markus Törnqvist mjt at nysv.org
Sat Sep 26 09:05:52 CEST 2009


On Fri, Sep 25, 2009 at 02:13:14PM -0600, Jeff Hardy wrote:
>On Fri, Sep 25, 2009 at 1:01 PM, Markus Törnqvist <mjt at nysv.org> wrote:
>> I haven't debugged this too much, yet, but I'm not sure what to make of it.

>> I certainly never had a settings.SESSION_ENGINE, and when I run CPython
>> and manage.py runserver elsewhere with tracing in the sources, I see it
>> default to django.contrib.sessions.backends.db
>
>You can add SESSION_ENGINE to your config file to change which backend
>it uses. It's in the django docs, somewhere.

Yeah I figured that part out ;) What I didn't figure out how it sets
the db backend instead of raising an AttributeError...

>> I probably need to sleep on this, I'm not getting where the magic
>> is happening, but in any case, it might also be that IronPython still
>> has import problems, because I've run this with CPython successfully...
>
>IIRC, the default session db backend doesn't work with IronPython. For
>testing I usually used the cache backend, and then set the cache to
>use the in-memory backend. Again, this is in the django docs,
>somewhere.

Do you have any pointers on why?

The only way I figured to debug is raise ValueError('|%s|' % engine)
and it tells me
 |<module 'django.contrib.sessions.backends.db' from 'C:\Program Files\IronPython 2.6\Lib\site-packages\django\contrib\sessions\backends\db.py'>| 

So I changed it to raise ValueError('|%s|' % dir(engine))
to see what's in there, because the db backend certainly has a SessionStore.

Instead of anything expected, I got
 'module' object has no attribute 'fix_location_header' 

 Line 170:        return '\n'.join(traceback.format_exception(*(exc_info or
 sys.exc_info())))
 Line 171:
 Line 172:    def apply_response_fixes(self, request, response):
 Line 173:        """
 Line 174:        Applies each of the functions in self.response_fixes to the request and
 
 Source File: C:\Program Files\IronPython 2.6\Lib\site-packages\django\core\handlers\base.py    Line: 172 

What happens there is, it iterates over self.response_fixes, and its first
element is http.fix_location_header. There's "from django import http"

http\__init__.py says "from utils import *" and http\utils.py has
def fix_location_header(request, response)

How do we debug this further? Looks like nearly random import breakage
to me still :/

>> I also found this django-aspnet thing, but its session store is apparently
>> just another backend, not anything that would fix this issue :/
>
>It uses the ASP.NET session store as a backend
>(http://jdhardy.blogspot.com/2008/11/integrating-django-and-aspnet.html),
>which might actually take care of your issue. I haven't updated them
>in a while, so I'm not sure if they work with the latest version of
>Django.

I had to hack a bit to get MSSQL going and for all these other issues
I haven't gotten around to really proofing it :P

I have the base/dbapi/query files in a package directory, with a sub-package
adonet2dbapi, and at least then it didn't break.

I also had to replace dbapi.py, because the original one was using
pythoncom and win32com.client, which are not for ironpython, and I figured
it cleaner to use something else than port the com interface stuff...

I'll give the ASP.NET solution a try, at some point, but we must first
understand why these imports don't work :/

Thanks!

-- 
mjt




More information about the Ironpython-users mailing list