A big release today…
MySQL database connection hostname
The official host name you should use for connecting to your account’s MySQL database instance has changed from
*yourusername*.mysql.pythonanywhere-services.com. This bypasses a part of our infrastructure that has started showing problems in recent weeks, and it should be much more efficient and reliable than the old way. The old hostname will continue to work, but we strongly advise you to move over to the new one.
New CNAMEs for web apps on custom domains
When you set up a web app on your own domain, you have to configure some DNS settings to tell the world that your domain is hosted on PythonAnywhere. We used to tell you to set up a CNAME pointing the domain to
*yourusername*.pythonanywhere.com. This had two problems:
- Some people got confused because they could also have a web app accessible via
*theirusername*.pythonanywhere.com. It seemed strange to them that they pointed their domain to that name, even though if was running a different web app.
- Other people weren’t confused, but they just didn’t want their PythonAnywhere account username visible to people with enough DNS expertise to look up the CNAME value.
In the new version of PythonAnywhere, we provide you with a different, anonymous CNAME for each of your custom web apps. Hopefully this is less confusing!
Again, the old system still works, and unlike the MySQL change, it’s just as efficient as the new way. We will deprecate the old way at some point in the future, but not soon – and we’ll give plenty of warning before we do. The system will warn you if you’re using the old CNAME pattern, though.
File editor upgrades
Just a couple of small changes here – we’ve made it a bit prettier and added a “Save as” button.
Shorter deploys (most of the time) in the future!
The biggest change in this update (at least from our perspective) is to how we manage the persistence of your files and data when we upgrade PythonAnywhere. Everything is (of course) stored on persistent storage volumes. Previously, we would move these volumes over from the old PythonAnywhere server cluster to the new one as part of our deployment procedure. This was a large part (in terms of time) of the downtime we had when we updated the system; we’d be sitting there watching as a script stopped old servers, disconnected drives, reattached them, and so on, all while the site was down for maintenance.
In our new infrastructure, the file servers themselves, not just their storage volumes, are persistent. We’ve moved as much code as possible out of them (internally we say that we’ve made them as stupid as possible) so that they will very rarely need upgrading. This means that when we release new versions of PythonAnywhere, we can spin up the new cluster already connected to the persistent file storage – so, upgrading should simply be a case of updating our internal databases and moving our external IP addresses over to the new machines.
We expect that this will mean that in most cases going forward, upgrading PythonAnywhere will take us around five minutes instead of 30. The first time around (that is, for the next update) we’ll budget 30 minutes anyway, because it will be the first time we’ve done things with the new setup. But hopefully we’ll come in considerably under budget on that :-)
Dropbox sharing switched off
The new file persistence stuff came at a small cost, however.
It’s been over a year since we announced that we were reluctantly going to have to deprecate Dropbox sharing with PythonAnywhere, and we’ve now finally switched it off completely. It was a feature that worked really well in the earliest days of our platform, but unfortunately the implementation just couldn’t scale, and we haven’t been able to work out a decent alternative.
So, all of the Dropbox shares that were previously visible in the Dropbox directory inside your home directory are now gone. A month ago, we notified everyone who had stuff shared with us via email, so hopefully this won’t have come as a surprise to anyone.
Well, that’s it for this time. Let us know what you think!