当你在 trac(An enhanced wiki and issue tracking system for software projects) 0.12 上启用某个插件后,比如 trac-mastertickets-3.0.1(Support for ticket dependencies),可能会要求你执行 trac-admin project_environment_path upgrade 以创建缺少的数据库表,比如 mastertickets。
如果你是使用 Apache 作为 web 前端,PostgreSQL(而不是默认的 sqlite) 作为后端存储的话,当执行完上述命令后,再用浏览器查看 trac 的时候可能会得到下面的错误信息:
Traceback (most recent call last): File "build/bdist.freebsd-8.1-RELEASE-amd64/egg/trac/web/api.py", line 440, in send_error data, 'text/html') File "build/bdist.freebsd-8.1-RELEASE-amd64/egg/trac/web/chrome.py", line 827, in render_template message = req.session.pop('chrome.%s.%d' % (type_, i)) File "build/bdist.freebsd-8.1-RELEASE-amd64/egg/trac/web/api.py", line 216, in __getattr__ value = self.callbacks[name](self) File "build/bdist.freebsd-8.1-RELEASE-amd64/egg/trac/web/main.py", line 300, in _get_session return Session(self.env, req) File "build/bdist.freebsd-8.1-RELEASE-amd64/egg/trac/web/session.py", line 203, in __init__ self.get_session(req.authname, authenticated=True) File "build/bdist.freebsd-8.1-RELEASE-amd64/egg/trac/web/session.py", line 219, in get_session super(Session, self).get_session(sid, authenticated) File "build/bdist.freebsd-8.1-RELEASE-amd64/egg/trac/web/session.py", line 61, in get_session db = self.env.get_db_cnx() File "build/bdist.freebsd-8.1-RELEASE-amd64/egg/trac/env.py", line 328, in get_db_cnx return get_read_db(self) File "build/bdist.freebsd-8.1-RELEASE-amd64/egg/trac/db/api.py", line 90, in get_read_db return _transaction_local.db or DatabaseManager(env).get_connection() File "build/bdist.freebsd-8.1-RELEASE-amd64/egg/trac/db/api.py", line 152, in get_connection return self._cnx_pool.get_cnx(self.timeout or None) File "build/bdist.freebsd-8.1-RELEASE-amd64/egg/trac/db/pool.py", line 226, in get_cnx return _backend.get_cnx(self._connector, self._kwargs, timeout) File "build/bdist.freebsd-8.1-RELEASE-amd64/egg/trac/db/pool.py", line 146, in get_cnx raise TimeoutError(errmsg) TimeoutError: Unable to get database connection within 0 seconds. (TracError(,))
根据上述错误信息,你可能会去检查数据库连接问题,并且百查不得头绪。其实是因为 trac 无法读取 conf/trac.ini 所致。
执行 trac-admin upgrade 之前,trac.ini的权限及属主信息如下:
-rw------- 1 www www 4998 10 31 23:20 conf/trac.ini
而执行完成后,其权限变成了:
-rw------- 1 root www 4998 10 31 23:20 conf/trac.ini
因为属主变成了 root,且 Apache 工作进程所在的用户组 www 的权限为g:---
,所以 Apache 无法读取 trac.ini,从而导致了上述错误的产生。
解决方法:
chown www conf/trac.ini
如果错误依旧,尝试重启动 Apache 试试:
apachectl restart