I worked out why my ancient photo albums were broken.
Part 6 of the Running to Stand Still series.
When I visited my pre-2004 albums all I got was was a plain status page reporting status code 500 Internal Server Error. Nothing in the logs (the access log recorded that a 500 was returned but nothing about why).
Could not reproduce it on my development server: everything worked fine.
manage.py runserver on my web server: it worked fine.
Tried running the sever via Gunicorn so as to be more like the deployment: still
In the end I had to put the production server itself in debug mode:
echo y | sudo tee /service/alleged/env/DEBUG sudo svc -du /service/alleged
Then I got to see the error page from Django, which had a trace showed that it was trying to read data from a CSV file and had failed to decode it as ASCII because it contained UTF-8 data.
I checked and my locale is set by my
LANG environment variable to
en_GB.UTF-8. But perhaps the server process does not have
LANG set, or
has it set to some non-human locale.
To check this I set the
LANG variable for the server using the same technique as before:
echo $LANG | sudo tee /service/alleged/env/LANG sudo svc -du /service/alleged
And lo! all was restored. Debugging over, so I can remove the
DEBUG flag by removing the file:
sudo rm /service/alleged/DEBUG
Set the locale of your server explicitly.