OMG I just found the same problem. This was exceedingly difficult to diagnose. Especially since I just pulled down TG2 like yesterday and it was broken...
My diagnosis was something about environ['pylons.routes_dict']['url'] It use to remove the leading '/'. Now it does not. When TGController tries to property intercept __before__ and __after__ it uses the 'url' to find the right object controller in which to find __before__. ObjectDispatchController._get_routing_info() makes the assumption that the url will not have a leading '/' I am not sure whether this is routes that is changing a contract, or the Controller which is making a foolish assumption. Is there a bug I should add to? Should I create a bug? n On Mar 2, 2:37 am, nickphold <[email protected]> wrote: > Hey, just had a horrible time debugging an issue, turns out the new > version of routes breaks something and causes all requests to 404 in > at least python 2.5 and 2.6 for tg2. We fixed this issue by going back > to 1.11. Not sure if this will help but here is a sample trace. > > serving on 0.0.0.0:50008 view athttp://127.0.0.1:50008 > 09:58:10,044 DEBUG [paste.httpserver.ThreadPool] Added task (0 tasks > queued) > 09:58:10,045 DEBUG [txn.140430996646160] new transaction > 09:58:10,047 DEBUG [routes.middleware] Matched GET /notify/newSample > 09:58:10,047 DEBUG [routes.middleware] Route path: '*url', defaults: > {'action': u'routes_placeholder', 'controller': u'root'} > 09:58:10,047 DEBUG [routes.middleware] Match dict: {'url': u'/notify/ > newSample', 'action': u'routes_placeholder', 'controller': u'root'} > 09:58:10,047 DEBUG [pylons.wsgiapp] Setting up Pylons stacked object > globals > 09:58:10,048 DEBUG [pylons.wsgiapp] Resolved URL to controller: > u'root' > 09:58:10,051 DEBUG [tg.wsgiapp] Found controller, module: > 'portalservice.controllers.root', class: 'RootController' > 09:58:10,051 DEBUG [pylons.wsgiapp] Controller appears to be a class, > instantiating > 09:58:10,051 DEBUG [pylons.wsgiapp] Calling controller class with WSGI > interface > 09:58:10,052 DEBUG [pylons.controllers.core] Calling '__before__' > method with keyword args: **{'pylons': <pylons.util.PylonsContext > object at 0x320e810>, 'url': u'/notify/newSample', 'start_response': > <function repl_start_response at 0x320ccf8>, 'controller': u'root', > 'environ': {'routes.route': <routes.route.Route object at 0x3209850>, > 'beaker.cache': <beaker.cache.CacheManager object at 0x3209b10>, > 'toscawidgets.javascript.require_once': False, 'pylons.routes_dict': > {'url': u'/notify/newSample', 'action': u'routes_placeholder', > 'controller': u'root'}, 'beaker.get_session': <bound method > SessionMiddleware._get_session of <beaker.middleware.SessionMiddleware > object at 0x3209a90>>, 'SCRIPT_NAME': '', 'webob.adhoc_attrs': > {'language': 'en-us'}, 'REQUEST_METHOD': 'GET', 'PATH_INFO': '/notify/ > newSample', 'repoze.tm.active': True, 'SERVER_PROTOCOL': 'HTTP/1.0', > 'QUERY_STRING': 'inj=fluorine&uj=756', 'paste.throw_errors': True, > 'CONTENT_LENGTH': '0', 'HTTP_USER_AGENT': 'Python-urllib/1.17', > 'SERVER_NAME': '0.0.0.0', 'REMOTE_ADDR': '127.0.0.1', > 'pylons.environ_config': {'session': 'beaker.session', 'cache': > 'beaker.cache'}, 'pylons.pylons': <pylons.util.PylonsContext object at > 0x320e810>, 'wsgi.url_scheme': 'http', 'wsgiorg.routing_args': > (<routes.util.URLGenerator object at 0x320e690>, {'url': u'/notify/ > newSample', 'action': u'routes_placeholder', 'controller': u'root'}), > 'SERVER_PORT': '50008', 'toscawidgets.framework': > <tw.mods.base.HostFramework object at 0x3209b90>, 'pylons.controller': > <portalservice.controllers.root.RootController object at 0x320e8d0>, > 'wsgi.input': <socket._fileobject object at 0x320c758 length=0>, > 'HTTP_HOST': '127.0.0.1:50008', 'beaker.session': {'_id': > '7b4f377cacb90c278345b48c9320cfff'}, 'wsgi.multithread': True, > 'routes.url': <routes.util.URLGenerator object at 0x320e690>, > 'wsgi.version': (1, 0), 'paste.registry': <paste.registry.Registry > object at 0x320e210>, 'toscawidgets.prefix': '/toscawidgets', > 'wsgi.run_once': False, 'wsgi.errors': <open file '<stderr>', mode 'w' > at 0x7fb8af831140>, 'wsgi.multiprocess': False, 'CONTENT_TYPE': '', > 'paste.httpserver.thread_pool': <paste.httpserver.ThreadPool object at > 0x136f110>}, 'action': u'routes_placeholder'} > 09:58:10,052 INFO [tg.i18n] Set request language to [] > 09:58:10,052 INFO [tg.i18n] Language []: not supported by FormEncode > 09:58:10,053 DEBUG [tg.controllers] No controller-wide authorization > at /notify/newSample > 09:58:10,053 DEBUG [pylons.controllers.core] Merging pylons.response > headers into start_response call, status: 404 Not Found > 09:58:10,054 DEBUG [txn.140430996646160] commit > 09:58:10,054 DEBUG [txn.140430996646160] new transaction > 09:58:10,054 DEBUG [routes.middleware] Matched GET /error/document > 09:58:10,054 DEBUG [routes.middleware] Route path: '*url', defaults: > {'action': u'routes_placeholder', 'controller': u'root'} > 09:58:10,054 DEBUG [routes.middleware] Match dict: {'url': u'/error/ > document', 'action': u'routes_placeholder', 'controller': u'root'} > 09:58:10,055 DEBUG [pylons.wsgiapp] Setting up Pylons stacked object > globals > 09:58:10,055 DEBUG [pylons.wsgiapp] Resolved URL to controller: > u'root' > 09:58:10,055 DEBUG [pylons.wsgiapp] Controller appears to be a class, > instantiating > 09:58:10,055 DEBUG [pylons.wsgiapp] Calling controller class with WSGI > interface > 09:58:10,055 DEBUG [pylons.controllers.core] Calling '__before__' > method with keyword args: **{'pylons': <pylons.util.PylonsContext > object at 0x321b310>, 'url': u'/error/document', 'start_response': > <function repl_start_response at 0x3216e60>, 'controller': u'root', > 'environ': {'wsgi.multiprocess': False, 'pylons.original_response': > <Response at 0x320e310 404 Not Found>, 'beaker.cache': > <beaker.cache.CacheManager object at 0x3209b10>, > 'toscawidgets.javascript.require_once': False, 'pylons.routes_dict': > {'url': u'/error/document', 'action': u'routes_placeholder', > 'controller': u'root'}, 'SERVER_PROTOCOL': 'HTTP/1.0', 'SCRIPT_NAME': > '', 'pylons.original_request': <Request at 0x320e390 > GEThttp://127.0.0.1:50008/notify/newSample?inj=fluorine&uj=756>, > 'webob.adhoc_attrs': {'response_type': None, 'language': 'en-us', > 'response_ext': None}, 'REQUEST_METHOD': 'GET', 'PATH_INFO': '/error/ > document', 'repoze.tm.active': True, 'beaker.get_session': <bound > method SessionMiddleware._get_session of > <beaker.middleware.SessionMiddleware object at 0x3209a90>>, > 'QUERY_STRING': 'inj=fluorine&uj=756', 'paste.throw_errors': True, > 'CONTENT_LENGTH': '0', 'HTTP_USER_AGENT': 'Python-urllib/1.17', > 'SERVER_NAME': '0.0.0.0', 'routes.route': <routes.route.Route object > at 0x3209850>, 'pylons.environ_config': {'session': 'beaker.session', > 'cache': 'beaker.cache'}, 'pylons.pylons': <pylons.util.PylonsContext > object at 0x321b310>, 'wsgi.url_scheme': 'http', > 'wsgiorg.routing_args': (<routes.util.URLGenerator object at > 0x321b210>, {'url': u'/error/document', 'action': > u'routes_placeholder', 'controller': u'root'}), 'SERVER_PORT': > '50008', 'toscawidgets.framework': <tw.mods.base.HostFramework object > at 0x3209b90>, 'pylons.controller': > <portalservice.controllers.root.RootController object at 0x321b450>, > 'wsgi.input': <socket._fileobject object at 0x320c758 length=0>, > 'HTTP_HOST': '127.0.0.1:50008', 'beaker.session': {'_id': > 'e182b6500d77717b340a7384fae37c33'}, 'wsgi.multithread': True, > 'routes.url': <routes.util.URLGenerator object at 0x321b210>, > 'wsgi.version': (1, 0), 'paste.registry': <paste.registry.Registry > object at 0x320e210>, 'toscawidgets.prefix': '/toscawidgets', > 'wsgi.run_once': False, 'wsgi.errors': <open file '<stderr>', mode 'w' > at 0x7fb8af831140>, 'REMOTE_ADDR': '127.0.0.1', 'CONTENT_TYPE': '', > 'paste.httpserver.thread_pool': <paste.httpserver.ThreadPool object at > 0x136f110>}, 'action': u'routes_placeholder'} > 09:58:10,056 INFO [tg.i18n] Set request language to [] > 09:58:10,056 INFO [tg.i18n] Language []: not supported by FormEncode > 09:58:10,056 DEBUG [tg.controllers] No controller-wide authorization > at /error/document > 09:58:10,057 DEBUG [pylons.controllers.core] Merging pylons.response > headers into start_response call, status: 404 Not Found > 09:58:10,057 DEBUG [txn.140430996646160] commit > ^C09:58:10,751 INFO [paste.httpserver.ThreadPool] Shutting down > threadpool -- You received this message because you are subscribed to the Google Groups "TurboGears" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/turbogears?hl=en.

