This was related to the way Django (version 1.4) runs tests and the way the staticfiles app works. When tests are run, DEBUG is set by the test runner to False. No problem when running TestCases because the pages are not actually loaded. No static files are needed.
Setup a test using LiveServerTestCase, and now static files are needed. But when DEBUG=False, the staticfiles app leaves serving static files to you. If you have never run DEBUG=False in your development environment, you probably are not setup to serve the static files. Hence you get a flood of HTTP 500 errors.
The solution is on stackoverflow. Here is my code (IS_DEV is a setting indicating the code is running on the development server):
if settings.IS_DEV and ('test' in sys.argv): urlpatterns += patterns('', url(r'^%s/(?P.*)$'%settings.STATIC_URL[1:], 'django.views.static.serve', { 'document_root': settings.STATIC_ROOT, }), ) urlpatterns += staticfiles_urlpatterns()
When I first implemented this solution, it appeared to not be working because I still got one HTTP 500 error. This was a little difficult to debug because instead of displaying a debug error page, it just generated a server error (because DEBUG=False). I was able to track down the source of that error by turning on the logger. This showed the error was due to a missing favicon.ico file.
Thanks for this! I had a similar problem, where I was getting an error that my static files "could not be found with ".
ReplyDeleteThe above solution didn't work for me. What did work was adding a similar `if` statement into `settings.py` at the point where the static files storage is set:
if not IS_DEV:
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.CachedStaticFilesStorage'