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

Reply via email to