﻿id	summary	reporter	owner	description	type	status	priority	component	severity	resolution	keywords	cc	release
7504	'Cannot operate on a closed cursor' exception causes db to appear as if upgrade is needed	Daniel Abel	Alec Thomas	"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''.

Moving the `cursor = db.cursor()` line to below the 'if self._need_migration(db)', ie. to just above the try/except appears to solve this issue.

So, suggestions:
 1. 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)
 1. 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."	defect	new	normal	TagsPlugin	blocker			Steffen Hoffmann	0.12
