Dear List, the ajax based background search crashes my web2py installation. It's version 1.77.3 and I'm using the fcgihandler to access the application. OS: OpenBSD 4.6, Python version is Python 2.5.4 (r254:67916, Oct 19 2009, 01:52:14).
As You can see below the search makes three database queries. The first search attempt works and the second crashes web2py. Would You be so kind to look into it? The error is the following: Unhandled exception in thread started by <bound method Connection.run of <gluon.contrib.gateways.fcgi.Connection object at 0x8b5af36c>> Traceback (most recent call last): File "/var/www/web2py/prod/gluon/contrib/gateways/fcgi.py", line 664, in run self.process_input() File "/var/www/web2py/prod/gluon/contrib/gateways/fcgi.py", line 700, in process_input self._do_params(rec) File "/var/www/web2py/prod/gluon/contrib/gateways/fcgi.py", line 799, in _do_params self._start_request(req) File "/var/www/web2py/prod/gluon/contrib/gateways/fcgi.py", line 783, in _start_request req.run() File "/var/www/web2py/prod/gluon/contrib/gateways/fcgi.py", line 592, in run self._flush() File "/var/www/web2py/prod/gluon/contrib/gateways/fcgi.py", line 599, in _flush self.stdout.close() File "/var/www/web2py/prod/gluon/contrib/gateways/fcgi.py", line 358, in close self._conn.writeRecord(rec) File "/var/www/web2py/prod/gluon/contrib/gateways/fcgi.py", line 715, in writeRecord rec.write(self._sock) File "/var/www/web2py/prod/gluon/contrib/gateways/fcgi.py", line 552, in write self._sendall(sock, header) File "/var/www/web2py/prod/gluon/contrib/gateways/fcgi.py", line 529, in _sendall sent = sock.send(data) socket.error: (32, 'Broken pipe') The jquery snippet that calls the background functions: function dvd() { ajax('bg_quick_dvd', ['keyword', 'option'], 'target_dvd'); } function music_cd() { ajax('bg_quick_music_cd', ['keyword', 'option'], 'target_music_cd'); } function book() { ajax('bg_quick_book', ['keyword', 'option'], 'target_book'); function start() { if(jQuery('#title').attr('checked')) jQuery('#option').val('1'); if(jQuery('#store').attr('checked')) jQuery('#option').val('0'); dvd(); setTimeout('music_cd()', 150); setTimeout('book()', 300); } And the backround functions: def bg_quick_dvd(): if (request.vars.option == '1'): pattern = '%' + request.vars.keyword + '%' dvds = db((db.dvds.user==user_id) & (db.dvds.title.like(pattern))).select(orderby=db.dvds.title) else: dvds = db((db.dvds.user==user_id) & (db.dvds.store==request.vars.keyword)).select(orderby=db.dvds.title) items = [A(row.title, _href=URL(c='dvd', r=request, f='show', args=row.id)) for row in dvds] return UL(*items).xml() @auth.requires_login() def bg_quick_music_cd(): if (request.vars.option == '1'): pattern = '%' + request.vars.keyword + '%' music_cds = db((db.music_cds.user==user_id) & (db.music_cds.title.like(pattern))).select(orderby=db.music_cds.title) else: music_cds = db((db.music_cds.user==user_id) & (db.music_cds.store==request.vars.keyword)).select(orderby=db.music_cds.title) items = [A(row.title, _href=URL(c='music_cd', r=request, f='show', args=row.id)) for row in music_cds] return UL(*items).xml() @auth.requires_login() def bg_quick_book(): if (request.vars.option == '1'): pattern = '%' + request.vars.keyword + '%' books = db((db.books.user==user_id) & (db.books.title.like(pattern))).select(orderby=db.books.title) else: books = db((db.books.user==user_id) & (db.books.store==request.vars.keyword)).select(orderby=db.books.title) items = [A(row.title, _href=URL(c='book', r=request, f='show', args=row.id)) for row in books] return UL(*items).xml() Best regards, Mate