'Cannot operate on a closed cursor' exception causes db to appear as if upgrade is needed
|Reported by:||Daniel Abel||Owned by:||Alec Thomas|
|Severity:||blocker||Keywords:||cursor, ProgrammingError, closed|
|Cc:||Steffen Hoffmann||Trac Release:||0.12|
Description (last modified by )
I'm trying to configure an existing Trac instance to work from under virtualenv (trac 0.12 with SQLite, wsgi and apache). I ran into a situation where, after running
trac-admin /path/to/env upgrade and wiki upgrade, trac, when being called by the webserver says that I have to run the upgrade (i.e. shows an error page to this effect). Running upgrade again on the command line says no upgrade necessary. That is, running trac from command-line and having it called from the webserver (via wsgi) gives two different results to the need to be upgraded? question.
I managed to track this down to the fact that TagModelProvider's
environment_needs_upgrade returns True when being called from wsgi, and False when being called from the console. The problem appears to be that the
cursor.execute('select count(*) from tags' ) line in there throws an exception, but not because the db is old, but because Cannot operate on a closed cursor.
cursor = db.cursor() line to below the 'if self._need_migration(db)', ie. to just above the try/except appears to solve this issue.
- the except: line in environment_needs_upgrade() shouldn't be so greedy, i.e. it shouldn't swallow all exceptions (if possible to filter out those caused by an old database)
- the 'cursor=db.cursor()' line should be moved to just above where it is first used.
Note that I assume the situation I ran into would be very difficult to reproduce, but the suggestions above won't have any drawbacks, and just help make the code cleaner.
Change History (8)
comment:1 Changed 7 years ago by
|Summary:||'Cannot operate on a closed cursor' eception causes db to appear as if upgrade is needed → 'Cannot operate on a closed cursor' exception causes db to appear as if upgrade is needed|
comment:7 Changed 6 years ago by
|Status:||new → closed|