Opened 17 years ago
Closed 17 years ago
#6218 closed defect (duplicate)
Assert read permissions of trac.ini to avoid misleading error messages
Reported by: | sfish | Owned by: | Christopher Lenz |
---|---|---|---|
Priority: | normal | Milestone: | |
Component: | web frontend/mod_python | Version: | 0.10.4 |
Severity: | normal | Keywords: | |
Cc: | Branch: | ||
Release Notes: | |||
API Changes: | |||
Internal Changes: |
Description
I've been running 4 projects on trac 0.9 for about a year now, recently I upgraded to 0.10.4 and were still able to run it like before. All my trac projects are using postgres as their dbms. Now, when I changed from running tracd (the standalone trac webserver) to use fastcgi and lighttpd, I get this "assert pysqlite" failure, even though I never had and still don't have (or use) (py)sqlite.
Here's the error output:
AssertionError Python 2.4.2: /usr/local/bin/python Sat Oct 20 13:09:58 2007 A problem occurred in a Python script. Here is the sequence of function calls leading up to the error, in the order they occurred. /usr/local/lib/python2.4/site-packages/trac/web/_fcgi.py in run(self=<trac.web._fcgi.Request object>) 568 """Runs the handler, flushes the streams, and ends the request.""" 569 try: 570 protocolStatus, appStatus = self.server.handler(self) 571 except: 572 traceback.print_exc(file=self.stderr) protocolStatus undefined, appStatus undefined, self = <trac.web._fcgi.Request object>, self.server = <trac.web._fcgi.WSGIServer object>, self.server.handler = <bound method WSGIServer.handler of <trac.web._fcgi.WSGIServer object>> /usr/local/lib/python2.4/site-packages/trac/web/_fcgi.py in handler(self=<trac.web._fcgi.WSGIServer object>, req=<trac.web._fcgi.Request object>) 1254 try: 1255 try: 1256 result = self.application(environ, start_response) 1257 try: 1258 for data in result: result = None, self = <trac.web._fcgi.WSGIServer object>, self.application = <function dispatch_request>, environ = {'DOCUMENT_ROOT': '/var/lhttpd/htdocs_default/', 'GATEWAY_INTERFACE': 'CGI/1.1', 'HTTPS': 'on', 'HTTP_ACCEPT': 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5', 'HTTP_ACCEPT_CHARSET': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'HTTP_ACCEPT_ENCODING': 'gzip,deflate', 'HTTP_ACCEPT_LANGUAGE': 'en-us,en;q=0.5', 'HTTP_CACHE_CONTROL': 'max-age=0', 'HTTP_CONNECTION': 'keep-alive', 'HTTP_HOST': 'www.veloci.se:7777', ...}, start_response = <function start_response> /usr/local/lib/python2.4/site-packages/trac/web/main.py in dispatch_request(environ={'DOCUMENT_ROOT': '/var/lhttpd/htdocs_default/', 'GATEWAY_INTERFACE': 'CGI/1.1', 'HTTPS': 'on', 'HTTP_ACCEPT': 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5', 'HTTP_ACCEPT_CHARSET': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'HTTP_ACCEPT_ENCODING': 'gzip,deflate', 'HTTP_ACCEPT_LANGUAGE': 'en-us,en;q=0.5', 'HTTP_CACHE_CONTROL': 'max-age=0', 'HTTP_CONNECTION': 'keep-alive', 'HTTP_HOST': 'www.veloci.se:7777', ...}, start_response=<function start_response>) 389 env = env_error = None 390 try: 391 env = _open_environment(env_path, run_once=run_once) 392 if env.base_url: 393 environ['trac.base_url'] = env.base_url env = None, global _open_environment = <function _open_environment>, env_path = '/var/trac/projects/foo', run_once = False /usr/local/lib/python2.4/site-packages/trac/web/main.py in _open_environment(env_path='/var/trac/projects/foo', run_once=False) 56 try: 57 if not env_path in env_cache: 58 env_cache[env_path] = open_environment(env_path) 59 env = env_cache[env_path] 60 finally: global env_cache = {}, env_path = '/var/trac/projects/foo', global open_environment = <function open_environment> /usr/local/lib/python2.4/site-packages/trac/env.py in open_environment(env_path='/var/trac/projects/foo') 461 462 env = Environment(env_path) 463 if env.needs_upgrade(): 464 raise TracError, 'The Trac Environment needs to be upgraded. Run ' \ 465 'trac-admin %s upgrade"' % env_path env = <trac.env.Environment object>, env.needs_upgrade = <bound method Environment.needs_upgrade of <trac.env.Environment object>> /usr/local/lib/python2.4/site-packages/trac/env.py in needs_upgrade(self=<trac.env.Environment object>) 339 def needs_upgrade(self): 340 """Return whether the environment needs to be upgraded.""" 341 db = self.get_db_cnx() 342 for participant in self.setup_participants: 343 if participant.environment_needs_upgrade(db): db undefined, self = <trac.env.Environment object>, self.get_db_cnx = <bound method Environment.get_db_cnx of <trac.env.Environment object>> /usr/local/lib/python2.4/site-packages/trac/env.py in get_db_cnx(self=<trac.env.Environment object>) 201 def get_db_cnx(self): 202 """Return a database connection from the connection pool.""" 203 return DatabaseManager(self).get_connection() 204 205 def shutdown(self, tid=None): global DatabaseManager = <class 'trac.db.api.DatabaseManager'>, self = <trac.env.Environment object>, ).get_connection undefined /usr/local/lib/python2.4/site-packages/trac/db/api.py in get_connection(self=<trac.db.api.DatabaseManager object>) 74 connector, args = self._get_connector() 75 self._cnx_pool = ConnectionPool(5, connector, **args) 76 return self._cnx_pool.get_cnx(self.timeout or None) 77 78 def shutdown(self, tid=None): self = <trac.db.api.DatabaseManager object>, self._cnx_pool = <trac.db.pool.ConnectionPool object>, self._cnx_pool.get_cnx = <bound method ConnectionPool.get_cnx of <trac.db.pool.ConnectionPool object>>, self.timeout = 20, builtin None = None /usr/local/lib/python2.4/site-packages/trac/db/pool.py in get_cnx(self=<trac.db.pool.ConnectionPool object>, timeout=20) 99 self._cursize -= 1 100 elif self._maxsize and self._cursize < self._maxsize: 101 cnx = self._connector.get_connection(**self._kwargs) 102 self._cursize += 1 103 break cnx undefined, self = <trac.db.pool.ConnectionPool object>, self._connector = <trac.db.sqlite_backend.SQLiteConnector object>, self._connector.get_connection = <bound method SQLiteConnector.get_connection of <trac.db.sqlite_backend.SQLiteConnector object>>, self._kwargs = {'path': u'/var/trac/projects/foo/db/trac.db'} /usr/local/lib/python2.4/site-packages/trac/db/sqlite_backend.py in get_connection(self=<trac.db.sqlite_backend.SQLiteConnector object>, path=u'/var/trac/projects/foo/db/trac.db', params={}) 111 112 def get_connection(self, path, params={}): 113 return SQLiteConnection(path, params) 114 115 def init_db(cls, path, params={}): global SQLiteConnection = <class 'trac.db.sqlite_backend.SQLiteConnection'>, path = u'/var/trac/projects/foo/db/trac.db', params = {} /usr/local/lib/python2.4/site-packages/trac/db/sqlite_backend.py in __init__(self=<trac.db.sqlite_backend.SQLiteConnection object>, path=u'/var/trac/projects/foo/db/trac.db', params={}) 138 139 def __init__(self, path, params={}): 140 assert have_pysqlite > 0 141 self.cnx = None 142 if path != ':memory:': global have_pysqlite = 0 AssertionError: args = ()
Attachments (0)
Change History (7)
comment:1 by , 17 years ago
Priority: | highest → normal |
---|---|
Severity: | normal → blocker |
comment:2 by , 17 years ago
Component: | browser → mod_python frontend |
---|---|
Owner: | changed from | to
comment:3 by , 17 years ago
Severity: | blocker → normal |
---|---|
Summary: | Assert "have_pysqlite > 0" fails, even though not using pysqlite as dbms for any project. → Assert read permissions of trac.ini to avoid misleading error messages |
follow-up: 5 comment:4 by , 17 years ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
close as requested …
comment:5 by , 17 years ago
Resolution: | invalid |
---|---|
Status: | closed → reopened |
Replying to ThurnerRupert:
close as requested …
? The author of the ticket has updated the ticket summary to reflect a new need, I don't understand why you closed this ticket.
comment:7 by , 17 years ago
Keywords: | have_pysqlite postgres removed |
---|---|
Resolution: | → duplicate |
Status: | reopened → closed |
This is a duplicate of #5535.
After doing some research in the trac source code I realized that for some reason trac doesn't read the trac.ini. It appeared to me that tracd was ran by the trac user, while lighttpd is ran by the lighttpd user, and since permissions to the trac projects are restricted to trac user only, the lighttpd user wasn't able to read there.
Therefore I suggest that you add some read permission check, so this kind of problems may be resolved faster and without adding unnecessary tickets.
And by the way, thanks for a great project management tool!