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