[forge:site-support:#5849]
Consistent 500s on https://sourceforge.net/p/fonttools/code/forks/
I think this is the right trace:
File does not exist: /var/www/icons/pi, referer: http://sourceforge.net/projects/pidgin/files/Pidgin/2.10.7/pidgin-2.10.7.exe/down load?accel_key=62%3A1386079262%3Ahttp%253A//www.pidgin.im/download/%3Afbca0263%242bb869b00cf93408f4fb85a0833b62c8d789bd8e&click_id=583ec1de-5c23-11e3-944e-0200ac1d1d97&source=accel File does not exist: /var/www/icons/re, referer: http://sourceforge.net/projects/repsnapper/files/latest/download File does not exist: /var/www/icons/pi, referer: http://sourceforge.net/projects/pidgin/files/Pidgin/2.10.7/pidgin-2.10.7.exe/down load?accel_key=62%3A1386079364%3Ahttp%253A//pidgin.im/%3Ab2743f29%245464321eb2b91289b9a5bd284245661059cb190e&click_id=9514bec4-5c23-11e3-9248-0200ac1d1d8c&source=accel File does not exist: /var/www/icons/pi, referer: http://sourceforge.net/projects/trillianotr/ mod_wsgi (pid=3064): Exception occurred processing WSGI script '/etc/httpd/conf.d/allura.wsgi'. IOError: failed to write data mod_wsgi (pid=3064): Exception occurred processing WSGI script '/etc/httpd/conf.d/allura.wsgi'. IOError: failed to write data Error - <type 'exceptions.AttributeError'>: 'NoneType' object has no attribute 'url' URL: https://sourceforge.net/p/fonttools/code/forks/ File '/var/local/env-allura/lib/python2.7/site-packages/WebError-0.10.3_20130423-py2.7.egg/weberror/errormiddleware.py', line 242 in next return self.app_iterator.next() File '/var/local/env-allura/lib/python2.7/site-packages/Paste-1.7.5.1-py2.7.egg/paste/registry.py', line 409 in streaming_iter for item in self.application(environ, start_response): File '/var/local/env-allura/lib/python2.7/site-packages/Ming-0.4.2-py2.7.egg/ming/odm/middleware.py', line 20 in __call__ result = self.app(environ, start_response) File '/var/local/allura/Allura/allura/lib/custom_middleware.py', line 59 in __call__ return self.app(environ, start_response) File '/var/local/env-allura/lib/python2.7/site-packages/EasyWidgets-0.2dev_20130716-py2.7.egg/ew/middleware.py', line 65 in __call __ result = self.app(environ, start_response) File '/var/local/allura/Allura/allura/lib/custom_middleware.py', line 180 in __call__ return resp(environ, start_response) File '/var/local/allura/Allura/allura/config/middleware.py', line 197 in AlluraGlobalsMiddleware return app(environ, start_response) File '/var/local/allura/Allura/allura/lib/custom_middleware.py', line 140 in __call__ return self._app(environ, session_start_response) File '/var/local/env-allura/lib/python2.7/site-packages/TimerMiddleware-0.4.4-py2.7.egg/timermiddleware/__init__.py', line 196 in __call__ resp = req.get_response(self.app) File '/var/local/env-allura/lib/python2.7/site-packages/WebOb-1.0.8-py2.7.egg/webob/request.py', line 1053 in get_response application, catch_exc_info=False) File '/var/local/env-allura/lib/python2.7/site-packages/WebOb-1.0.8-py2.7.egg/webob/request.py', line 1022 in call_application app_iter = application(self.environ, start_response) File '/var/local/allura/Allura/allura/lib/custom_middleware.py', line 96 in __call__ self.app, environ, catch_exc_info=True) File '/var/local/env-allura/lib/python2.7/site-packages/Pylons-1.0-py2.7.egg/pylons/util.py', line 48 in call_wsgi_application app_iter = application(environ, start_response) File '/var/local/env-allura/lib/python2.7/site-packages/Beaker-1.5.4-py2.7.egg/beaker/middleware.py', line 152 in __call__ return self.wrap_app(environ, session_start_response) File '/var/local/env-allura/lib/python2.7/site-packages/Routes-1.12.3-py2.7.egg/routes/middleware.py', line 131 in __call__ response = self.app(environ, start_response) File '/var/local/forge-classic/sfx/middleware.py', line 49 in __call__ resp = request.get_response(self.app) File '/var/local/env-allura/lib/python2.7/site-packages/WebOb-1.0.8-py2.7.egg/webob/request.py', line 1053 in get_response application, catch_exc_info=False) File '/var/local/env-allura/lib/python2.7/site-packages/WebOb-1.0.8-py2.7.egg/webob/request.py', line 1022 in call_application app_iter = application(self.environ, start_response) File '/var/local/env-allura/lib/python2.7/site-packages/Pylons-1.0-py2.7.egg/pylons/wsgiapp.py', line 107 in __call__ response = self.dispatch(controller, environ, start_response) File '/var/local/env-allura/lib/python2.7/site-packages/Pylons-1.0-py2.7.egg/pylons/wsgiapp.py', line 312 in dispatch return controller(environ, start_response) File '/var/local/allura/Allura/allura/lib/base.py', line 46 in __call__ response = super(WsgiDispatchController, self).__call__(environ, start_response) File '/var/local/env-allura/lib/python2.7/site-packages/Pylons-1.0-py2.7.egg/pylons/controllers/core.py', line 211 in __call__ response = self._dispatch_call() File '/var/local/env-allura/lib/python2.7/site-packages/Pylons-1.0-py2.7.egg/pylons/controllers/core.py', line 162 in _dispatch_ca ll response = self._inspect_call(func) File '/var/local/env-allura/lib/python2.7/site-packages/Pylons-1.0-py2.7.egg/pylons/controllers/core.py', line 105 in _inspect_cal l result = self._perform_call(func, args) File '/var/local/env-allura/lib/python2.7/site-packages/TurboGears2-2.1.5-py2.7.egg/tg/controllers/dispatcher.py', line 258 in _pe rform_call r = self._call(func, params, remainder=remainder) File '/var/local/allura/Allura/allura/lib/patches.py', line 116 in _call return old_controller_call(self, controller, *args, **kwargs) File '/var/local/env-allura/lib/python2.7/site-packages/TurboGears2-2.1.5-py2.7.egg/tg/controllers/decoratedcontroller.py', line 1 20 in _call output = controller_callable(*remainder, **dict(params)) File '<string>', line 2 in forks File '/var/local/allura/Allura/allura/lib/patches.py', line 82 in with_trailing_slash return func(*args, **kwargs) File '/var/local/allura/Allura/allura/controllers/repository.py', line 94 in forks repo_path_parts = f.url().strip('/').split('/') File '/var/local/allura/Allura/allura/model/repository.py', line 448 in url return self.app_config.url() File '/var/local/allura/Allura/allura/model/project.py', line 974 in url return project.url() + self.options.mount_point + '/' AttributeError: 'NoneType' object has no attribute 'url'
Diff:
The problem is that one of repo's forks don't have an options in
AppConfig
. We have no idea how it might happen. Deleting repo's fork doesn't reproduce that error. Can you check in mongo directly if this is the case?Workaround for this could be:
I've keeping ticket on our side open, maybe you'll have some ideas how that might happen? If workaround above is good enough for now - let me know and I'll close the ticket.
I checked
db['git-repository'].find({'upstream_repo.name': '/p/fonttools/code/'})
and the 3 forks' app_config_ids all have entries in theconfig
collection. But 2 of those configs do not have their associated projects any more. So somehow the project got removed but its app configs didn't get removed at that time.Ok, so I think workaround that I mentioned earlier must be:
I don't know how projects end up missing, since AFAIR project deletion just marks project as deleted and doesn't remove actual entry.
I've committed the change you suggested.
I don't know how the projects would've been removed either. They were user-projects. And we have a private script we use to actually remove tools, but it removes app configs too, and I don't see any logs for it having run for the projects. Oh well.. not a concern at this point.