This is an account of a particular use-case I ran into recently and how I solved my problem by hosting WordPress on Heroku. I recently needed to migrate a client's site to new hosting. It's a WordPress-based site so normally I'd go for WP Engine but unfortunately the client is no longer maintaining the site and did not want to pay for hosting as long as they weren't active on the site. Heroku to the rescue! Heroku's basic level of hosting is free and performs pretty well for low-traffic sites so it's a good host for this particular case.
However, Heroku's hosting also has a list of caveats that make it less than ideal for comprehensive/complicated solutions like WordPress as opposed to something like a quick Ruby-based app. More specifically, while Heroku allows you unfettered access to the filesystem even after installation, that access is temporary. Heroku regularly deletes any files that have been added after the install process. This is part of their "ethereal filesystem"(read: we delete your stuff with a simple cron job). Now, that doesn't necessarily make it incompatible with WordPress, you just need to accept a few restrictions on normal use regarding the addition/modification of files.
When updating plugins and themes or even uploading new images/media, you'll need to do so locally and then push those changes to Heroku using git. If you haven't used git before, it's not too hard. For beginners, there's a very legible resource for learning git at git-scm. For more advanced users, check out the docs. In most cases you'll do something like add a new photo for a post or upgrade a plugin. Once you're done, you'll want to do the following on the command line from the root of your WordPress project:
# Tell git to look at the changes you made
git add .
# Tell git to remember how those changes looked.
git commit -m "Updated my WordPress CORS plugin."
# Tell git to send those changes to Heroku.
git push heroku
After you push to Heroku you'll see their service automagically updating your website and if all goes well your changes will be live in about 30 seconds.
Now, if you're only using one dyno, you'll be on Heroku's free plan which is awesome. However, in order to save resources, apps running on the free plan will "go to sleep" after about 15 minutes of inactivity. This can lead to a really bad experience for users who are the first to visit a sleeping machine because it will take 20-30 seconds to boot up and sometimes doesn't respond after that period. The way to get around this limitation is to have someone regularly visit your site. The best way to do this is with an uptime service, many of which are free. I personally use UptimeRobot but Pingdom is good too and there are many more. Tell Uptime to check your site's address every 10 minutes or so and it will stay nice and snappy. As an added bonus, you'll be notified if there's ever an issue with your site.
If you're interested in hosting your own WordPress site on Heroku for free or if you'd like a more technical breakdown, check out Matt Hoofman's getting started guide and wiki on GitHub. It outlines every step you need to follow and migrating your site is actually much easier than it sounds. If you have any questions/suggestions, leave a comment! I'd be happy to help. If you'd like to support open-source projects like this one, leave a small donation via gittip.