TracForge as fcgi in shared host

8 views
Skip to first unread message

Fernando Garrido Vaz

unread,
Mar 25, 2007, 8:54:12 PM3/25/07
to trac-...@googlegroups.com

Hi all,

I've been trying to setup TracForge in a shared webhost environment,
which means I can only run trac under cgi or fcgi. I have tried both,
searched the archives and tried what I found there (explicitly loading
all the modules in [components]), but the problem seems really to be
related to cgi. This is what I get when I run it under fcgi:


AssertionError Python 2.3.5: /usr/bin/python
Sun Mar 25 17:26:45 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.

/home/garrido/packages/lib/python2.3/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>>

/home/garrido/packages/lib/python2.3/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 =
{'CONTENT_LENGTH': '128', 'CONTENT_TYPE':
'application/x-www-form-urlencoded', 'DOCUMENT_ROOT':
'/home/garrido/dev.garridovaz.com/', 'GATEWAY_INTERFACE': 'CGI/1.1',
'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.7,pt-br;q=0.3', 'HTTP_CACHE_CONTROL': 'max-age=0',
'HTTP_CONNECTION': 'keep-alive', ...}, start_response = <function
start_response>

/home/garrido/packages/lib/python2.3/site-packages/trac/web/main.py in
dispatch_request(environ={'CONTENT_LENGTH': '128', 'CONTENT_TYPE':
'application/x-www-form-urlencoded', 'DOCUMENT_ROOT':
'/home/garrido/dev.garridovaz.com/', 'GATEWAY_INTERFACE': 'CGI/1.1',
'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.7,pt-br;q=0.3', 'HTTP_CACHE_CONTROL': 'max-age=0',
'HTTP_CONNECTION': 'keep-alive', ...}, start_response=<function
start_response>)
418 }
419 try:
420 req.send_error(sys.exc_info(), status=500)
421 except RequestDone:
422 return []
req = <trac.web.api.Request object>, req.send_error = <bound method
Request.send_error of <trac.web.api.Request object>>, global sys =
<module 'sys' (built-in)>, sys.exc_info = <built-in function exc_info>,
status undefined

/home/garrido/packages/lib/python2.3/site-packages/trac/web/api.py in
send_error(self=<trac.web.api.Request object>, exc_info=(<class
exceptions.AssertionError>, <exceptions.AssertionError instance>,
<traceback object>), template='error.cs', content_type='text/html',
status=500)
392
393 self._write = self._start_response(self._status,
self._outheaders,
394 exc_info)
395
396 if self.method != 'HEAD':
exc_info = (<class exceptions.AssertionError>,
<exceptions.AssertionError instance>, <traceback object>)

/home/garrido/packages/lib/python2.3/site-packages/trac/web/_fcgi.py in
start_response(status='500 Internal Error',
response_headers=[('Cache-control', 'must-revalidate'), ('Expires',
'Fri, 01 Jan 1999 00:00:00 GMT'), ('Content-Type',
'text/html;charset=utf-8'), ('Content-Length', '4946'), ('Set-Cookie',
u'trac_auth=1176c6966cebee05194ff2c83ee4d5af; Path=/;'), ('Set-Cookie',
u'trac_session=6fe536a9ee1b824f74f1b8d6; expires=Mon, 26-Mar-2007
00:26:45 GMT; Path=/index.fcgi;')], exc_info=None)
1245 for name,val in response_headers:
1246 assert type(name) is str, 'Header names must
be strings'
1247 assert type(val) is str, 'Header values must
be strings'
1248
1249 headers_set[:] = [status, response_headers]
builtin type = <type 'type'>, val =
u'trac_auth=1176c6966cebee05194ff2c83ee4d5af; Path=/;', builtin str =
<type 'str'>

AssertionError: Header values must be strings
args = ('Header values must be strings',)

And this under cgi:


Traceback (most recent call last):
File
"/home/garrido/packages/lib/python2.3/site-packages/trac/web/main.py",
line 387, in dispatch_request
dispatcher.dispatch(req)
File
"/home/garrido/packages/lib/python2.3/site-packages/trac/web/main.py",
line 183, in dispatch
req.perm = PermissionCache(self.env, req.authname)
File
"/home/garrido/packages/lib/python2.3/site-packages/trac/perm.py", line
263, in __init__
self.perms = PermissionSystem(env).get_user_permissions(username)
File
"/home/garrido/packages/lib/python2.3/site-packages/trac/perm.py", line
227, in get_user_permissions
for perm in self.store.get_user_permissions(username):
File
"/home/.mowpurrs/garrido/packages/lib/python2.3/site-packages/TracForge-1.0-py2.3.egg/tracforge/admin/perm.py",
line 20, in get_user_permissions
subjects += list(provider.get_permission_groups(username))
File
"/home/.mowpurrs/garrido/packages/lib/python2.3/site-packages/TracForge-1.0-py2.3.egg/tracforge/admin/perm.py",
line 80, in get_permission_groups
group_extn_point =
PermissionSystem(self.master_env).store.group_providers
File
"/home/garrido/packages/lib/python2.3/site-packages/trac/config.py",
line 330, in __get__
value = self.accessor(section, self.name, self.default)
File
"/home/.mowpurrs/garrido/packages/lib/python2.3/site-packages/TracForge-1.0-py2.3.egg/tracforge/admin/config.py",
line 10, in accessor
return _open_environment(val)
File
"/home/garrido/packages/lib/python2.3/site-packages/trac/web/main.py",
line 58, in _open_environment
env_cache[env_path] = open_environment(env_path)
File "/home/garrido/packages/lib/python2.3/site-packages/trac/env.py",
line 434, in open_environment
env = Environment(env_path)
File "/home/garrido/packages/lib/python2.3/site-packages/trac/env.py",
line 126, in __init__
self.verify()
File "/home/garrido/packages/lib/python2.3/site-packages/trac/env.py",
line 174, in verify
fd = open(os.path.join(self.path, 'VERSION'), 'r')
IOError: [Errno 2] No such file or directory:
'/hoe/garrido/dev.garridovaz.com/trac_sites/garridovaz/VERSION'


The relevant sections of trac.ini for the master:

[components]
tracforge.* = enabled
tracforge.linker.* = disabled
tracforge.linker.auth.tracforgecookiemunger = enabled
tracforge.subscriptions.* = disabled
tracforge.admin.admin.tracforgeadminmodule = enabled
tracforge.admin.api.tracforgeadminsystem = enabled
tracforge.admin.membership.tracforgemembershipmodule = enabled
tracforge.admin.perm.tracforgegroupsmodule = enabled
tracforge.admin.perm.tracforgepermissionmodule = enabled
tracforge.admin.perm_admin.permissionadminpage = enabled
tracforge.admin.prototypes_admin.tracforgeconfigsetadminmodule = enabled
tracforge.admin.prototypes_admin.tracforgeprototypesadminmodule = enabled
acct_mgr.* = enabled
acct_mgr.web_ui.registrationmodule = disabled
iniadmin.* = enabled
trac.web.auth.loginmodule = disabled
tracnav.* = enabled
webadmin.* = enabled


[trac]
authz_file =
authz_module_name =
base_url =
check_auth_ip = true
database = sqlite:db/trac.db
default_charset = iso-8859-15
default_handler = WikiModule
htdocs_location =
ignore_auth_case = false
mainnav = wiki,timeline,roadmap,browser,tickets,newticket,search
metanav = login,logout,settings,help,about
permission_store = TracForgePermissionModule
repository_dir = /home/garrido/svn/dev_code
repository_type = svn
# request_filters = <set in global trac.ini>
# templates_dir = <set in global trac.ini>
timeout = 20

[tracforge]
master_path = /home/garrido/dev.garridovaz.com/trac_sites/garridovaz
uri_root = /
tracforge.admin.admin.tracforgeadminmodule = enabled
tracforge.admin.api.tracforgeadminsystem = enabled
tracforge.admin.membership.tracforgemembershipmodule = enabled
tracforge.admin.perm.tracforgegroupsmodule = enabled
tracforge.admin.perm.tracforgepermissionmodule = enabled
tracforge.admin.perm_admin.permissionadminpage = enabled
tracforge.admin.prototypes_admin.tracforgeconfigsetadminmodule = enabled
tracforge.admin.prototypes_admin.tracforgeprototypesadminmodule = enabled

[tracforge-client]
# filters = <set in global trac.ini>

[tracforge-envs]
* = {}

I am running Trac 0.10.3 - everything seems to work (wiki, timeline,
roadmap, tickets, source browsing), except for authentication.

Sorry for the long message, but I wanted to include everything that
might be relevant.

Thnx,

Fernando
Hi all,

I've been trying to setup TracForge in a shared webhost environment,
which means I can only run trac under cgi or fcgi. I have tried both,
searched the archives and tried what I found there (explicitly loading
all the modules in [components]), but the problem seems really to be
related to cgi. This is what I get when I run it under fcgi:


AssertionError Python 2.3.5: /usr/bin/python
Sun Mar 25 17:26:45 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.

/home/garrido/packages/lib/python2.3/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>>

/home/garrido/packages/lib/python2.3/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 =
{'CONTENT_LENGTH': '128', 'CONTENT_TYPE':
'application/x-www-form-urlencoded', 'DOCUMENT_ROOT':
'/home/garrido/dev.garridovaz.com/', 'GATEWAY_INTERFACE': 'CGI/1.1',
'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.7,pt-br;q=0.3', 'HTTP_CACHE_CONTROL': 'max-age=0',
'HTTP_CONNECTION': 'keep-alive', ...}, start_response = <function
start_response>

/home/garrido/packages/lib/python2.3/site-packages/trac/web/main.py in
dispatch_request(environ={'CONTENT_LENGTH': '128', 'CONTENT_TYPE':
'application/x-www-form-urlencoded', 'DOCUMENT_ROOT':
'/home/garrido/dev.garridovaz.com/', 'GATEWAY_INTERFACE': 'CGI/1.1',
'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.7,pt-br;q=0.3', 'HTTP_CACHE_CONTROL': 'max-age=0',
'HTTP_CONNECTION': 'keep-alive', ...}, start_response=<function
start_response>)
418 }
419 try:
420 req.send_error(sys.exc_info(), status=500)
421 except RequestDone:
422 return []
req = <trac.web.api.Request object>, req.send_error = <bound method
Request.send_error of <trac.web.api.Request object>>, global sys =
<module 'sys' (built-in)>, sys.exc_info = <built-in function exc_info>,
status undefined

/home/garrido/packages/lib/python2.3/site-packages/trac/web/api.py in
send_error(self=<trac.web.api.Request object>, exc_info=(<class
exceptions.AssertionError>, <exceptions.AssertionError instance>,
<traceback object>), template='error.cs', content_type='text/html',
status=500)
392
393 self._write = self._start_response(self._status,
self._outheaders,
394 exc_info)
395
396 if self.method != 'HEAD':
exc_info = (<class exceptions.AssertionError>,
<exceptions.AssertionError instance>, <traceback object>)

/home/garrido/packages/lib/python2.3/site-packages/trac/web/_fcgi.py in
start_response(status='500 Internal Error',
response_headers=[('Cache-control', 'must-revalidate'), ('Expires',
'Fri, 01 Jan 1999 00:00:00 GMT'), ('Content-Type',
'text/html;charset=utf-8'), ('Content-Length', '4946'), ('Set-Cookie',
u'trac_auth=1176c6966cebee05194ff2c83ee4d5af; Path=/;'), ('Set-Cookie',
u'trac_session=6fe536a9ee1b824f74f1b8d6; expires=Mon, 26-Mar-2007
00:26:45 GMT; Path=/index.fcgi;')], exc_info=None)
1245 for name,val in response_headers:
1246 assert type(name) is str, 'Header names must
be strings'
1247 assert type(val) is str, 'Header values must
be strings'
1248
1249 headers_set[:] = [status, response_headers]
builtin type = <type 'type'>, val =
u'trac_auth=1176c6966cebee05194ff2c83ee4d5af; Path=/;', builtin str =
<type 'str'>

AssertionError: Header values must be strings
args = ('Header values must be strings',)

And this under cgi:


Traceback (most recent call last):
File
"/home/garrido/packages/lib/python2.3/site-packages/trac/web/main.py",
line 387, in dispatch_request
dispatcher.dispatch(req)
File
"/home/garrido/packages/lib/python2.3/site-packages/trac/web/main.py",
line 183, in dispatch
req.perm = PermissionCache(self.env, req.authname)
File
"/home/garrido/packages/lib/python2.3/site-packages/trac/perm.py", line
263, in __init__
self.perms = PermissionSystem(env).get_user_permissions(username)
File
"/home/garrido/packages/lib/python2.3/site-packages/trac/perm.py", line
227, in get_user_permissions
for perm in self.store.get_user_permissions(username):
File
"/home/.mowpurrs/garrido/packages/lib/python2.3/site-packages/TracForge-1.0-py2.3.egg/tracforge/admin/perm.py",
line 20, in get_user_permissions
subjects += list(provider.get_permission_groups(username))
File
"/home/.mowpurrs/garrido/packages/lib/python2.3/site-packages/TracForge-1.0-py2.3.egg/tracforge/admin/perm.py",
line 80, in get_permission_groups
group_extn_point =
PermissionSystem(self.master_env).store.group_providers
File
"/home/garrido/packages/lib/python2.3/site-packages/trac/config.py",
line 330, in __get__
value = self.accessor(section, self.name, self.default)
File
"/home/.mowpurrs/garrido/packages/lib/python2.3/site-packages/TracForge-1.0-py2.3.egg/tracforge/admin/config.py",
line 10, in accessor
return _open_environment(val)
File
"/home/garrido/packages/lib/python2.3/site-packages/trac/web/main.py",
line 58, in _open_environment
env_cache[env_path] = open_environment(env_path)
File "/home/garrido/packages/lib/python2.3/site-packages/trac/env.py",
line 434, in open_environment
env = Environment(env_path)
File "/home/garrido/packages/lib/python2.3/site-packages/trac/env.py",
line 126, in __init__
self.verify()
File "/home/garrido/packages/lib/python2.3/site-packages/trac/env.py",
line 174, in verify
fd = open(os.path.join(self.path, 'VERSION'), 'r')
IOError: [Errno 2] No such file or directory:
'/hoe/garrido/dev.garridovaz.com/trac_sites/garridovaz/VERSION'


The relevant sections of trac.ini for the master:

[components]
tracforge.* = enabled
tracforge.linker.* = disabled
tracforge.linker.auth.tracforgecookiemunger = enabled
tracforge.subscriptions.* = disabled
tracforge.admin.admin.tracforgeadminmodule = enabled
tracforge.admin.api.tracforgeadminsystem = enabled
tracforge.admin.membership.tracforgemembershipmodule = enabled
tracforge.admin.perm.tracforgegroupsmodule = enabled
tracforge.admin.perm.tracforgepermissionmodule = enabled
tracforge.admin.perm_admin.permissionadminpage = enabled
tracforge.admin.prototypes_admin.tracforgeconfigsetadminmodule = enabled
tracforge.admin.prototypes_admin.tracforgeprototypesadminmodule = enabled
acct_mgr.* = enabled
acct_mgr.web_ui.registrationmodule = disabled
iniadmin.* = enabled
trac.web.auth.loginmodule = disabled
tracnav.* = enabled
webadmin.* = enabled


[trac]
authz_file =
authz_module_name =
base_url =
check_auth_ip = true
database = sqlite:db/trac.db
default_charset = iso-8859-15
default_handler = WikiModule
htdocs_location =
ignore_auth_case = false
mainnav = wiki,timeline,roadmap,browser,tickets,newticket,search
metanav = login,logout,settings,help,about
permission_store = TracForgePermissionModule
repository_dir = /home/garrido/svn/dev_code
repository_type = svn
# request_filters = <set in global trac.ini>
# templates_dir = <set in global trac.ini>
timeout = 20

[tracforge]
master_path = /home/garrido/dev.garridovaz.com/trac_sites/garridovaz
uri_root = /
tracforge.admin.admin.tracforgeadminmodule = enabled
tracforge.admin.api.tracforgeadminsystem = enabled
tracforge.admin.membership.tracforgemembershipmodule = enabled
tracforge.admin.perm.tracforgegroupsmodule = enabled
tracforge.admin.perm.tracforgepermissionmodule = enabled
tracforge.admin.perm_admin.permissionadminpage = enabled
tracforge.admin.prototypes_admin.tracforgeconfigsetadminmodule = enabled
tracforge.admin.prototypes_admin.tracforgeprototypesadminmodule = enabled

[tracforge-client]
# filters = <set in global trac.ini>

[tracforge-envs]
* = {}

I am running Trac 0.10.3 - everything seems to work (wiki, timeline,
roadmap, tickets, source browsing), except for authentication.

Sorry for the long message, but I wanted to include everything that
might be relevant.

Thnx,

Fernando

Noah Kantrowitz

unread,
Mar 26, 2007, 1:11:17 AM3/26/07
to trac-...@googlegroups.com
Fernando Garrido Vaz wrote:
[snip]
Does this file exist?

>
> The relevant sections of trac.ini for the master:
>
> [components]
> tracforge.* = enabled
> tracforge.linker.* = disabled
> tracforge.linker.auth.tracforgecookiemunger = enabled
> tracforge.subscriptions.* = disabled
> tracforge.admin.admin.tracforgeadminmodule = enabled
> tracforge.admin.api.tracforgeadminsystem = enabled
> tracforge.admin.membership.tracforgemembershipmodule = enabled
> tracforge.admin.perm.tracforgegroupsmodule = enabled
> tracforge.admin.perm.tracforgepermissionmodule = enabled
> tracforge.admin.perm_admin.permissionadminpage = enabled
> tracforge.admin.prototypes_admin.tracforgeconfigsetadminmodule = enabled
> tracforge.admin.prototypes_admin.tracforgeprototypesadminmodule = enabled
> acct_mgr.* = enabled
> acct_mgr.web_ui.registrationmodule = disabled
> iniadmin.* = enabled
> trac.web.auth.loginmodule = disabled
> tracnav.* = enabled
> webadmin.* = enabled
>
This does not look like what I specify in the guide, please fix that.

Fernando Garrido Vaz

unread,
Mar 26, 2007, 6:33:06 AM3/26/07
to trac-...@googlegroups.com
Hi Noah,

Under cgi, I get that message no matter what my trac.ini is, and no part
of trac works. And no, the file it complains about doesn't exist, you
will notice it is looking for directory "/hoe/......" rather than
"/home/....", so that will never exist....

Under fcgi, everything but the authentication works. I have changed
trac.ini back to what is suggested in the guide, here are the relevant
parts of it:

[components]
tracforge.* = enabled
tracforge.linker.* = disabled
tracforge.linker.auth.tracforgecookiemunger = enabled
tracforge.subscriptions.* = disabled

acct_mgr.* = enabled
acct_mgr.web_ui.registrationmodule = disabled
iniadmin.* = enabled
trac.web.auth.loginmodule = disabled
tracnav.* = enabled
webadmin.* = enabled

[account-manager]
# authentication_url = <set in global trac.ini>
generated_password_length = 8
# htdigest_realm = <set in global trac.ini>
password_file = /home/garrido/dev.garridovaz.com/trac_sites/trac.htpasswd
password_format = htpasswd
password_store = TracForgePermissionModule

[trac]
authz_file =
authz_module_name =
base_url =
check_auth_ip = true
database = sqlite:db/trac.db
default_charset = iso-8859-15
default_handler = WikiModule
htdocs_location =
ignore_auth_case = false
mainnav = wiki,timeline,roadmap,browser,tickets,newticket,search
metanav = login,logout,settings,help,about
permission_store = TracForgePermissionModule
repository_dir = /home/garrido/svn/dev_code
repository_type = svn
# request_filters = <set in global trac.ini>
# templates_dir = <set in global trac.ini>
timeout = 20

[tracforge]
master_path = /home/garrido/dev.garridovaz.com/trac_sites/garridovaz
uri_root = /

[tracforge-client]


# filters = <set in global trac.ini>

[tracforge-envs]
* = {}


I have also tried enabling trac.web.auth.loginmodule, but surprisingly
(?) I get a message stating there is no handler registered for that
action when I access the login url.

Thnx a lot for your help.

Fernando

Noah Kantrowitz escreveu:

Noah Kantrowitz

unread,
Mar 26, 2007, 6:44:13 AM3/26/07
to trac-...@googlegroups.com
Fernando Garrido Vaz wrote:
> Hi Noah,
>
> Under cgi, I get that message no matter what my trac.ini is, and no part
> of trac works. And no, the file it complains about doesn't exist, you
> will notice it is looking for directory "/hoe/......" rather than
> "/home/....", so that will never exist....
>
>
That path is coming from the master_path in that environment. Are you
sure it is correct?

--Noah

Reply all
Reply to author
Forward
0 new messages