Testing new Ubuntu versions

Newer Ubuntu versions are less dramatically new these days, which is probably a good thing, but I like to take them for a spin anyway – old habits and all that. One nice change since the days of Dapper Drake is the ability to boot off a usb stick – much easier than having to burn CDs. On my laptop, I get to the boot menu by pressing the Esc key soon after booting and then selecting the USB stick to boot off. But there can still be problems. In particular, I was receiving the error message:

gfxboot.c32: not a COM32R image

Turns out you need to press the tab key and then type in “live”. Obvious really (not) Ubuntu 14.04 LTS live USB boot error (gfxboot.c32:not a valid COM32R imag).

Another good thing about modern Ubuntus is that they generally work out of the box just how I like them. I remove items from the launcher, shrink the icon size and add the Show Desktop icon to the launcher (under System Settings > Appearance), and I’m almost good to go. There is still one thing that takes a bit of fiddling – adding the ability to minimise on click (Ubuntu 14.04 Adds ‘Click to Minimize App’ Option to Unity Launcher).

Step 1: Open Ubuntu Software Centre
Step 2: Install CompizConfig Settings Manager
Step 3: Open Ubuntu Unity plugin
Step 4: Launcher > Minimize Single Window Applications (Unsupported)

On the one hand the version changes aren’t as exciting as they used to be, but on the other, it’s never been easier to check them out.

Deploying simple flask app on heroku

I’m now a fan of Heroku. How cool is it to be able to deploy a Python app to free hosting?!

Blackbox flask app on Heroku

But in spite of great docs at Getting Started with Python on Heroku there were a few issues I had to handle. The main problems were because the instructions assumed you wanted to start with their demo app and not your own – which meant that they only explained things like requirements.txt and Procfile after you needed to have already made them (they were already present in the demo version).

Note – I am already familiar with git so I don’t explain that here – see Starting a simple Flask app with Heroku for more fleshed-out instructions.

Anyway, here is what I needed to do at the start:

1) Change the app.run(host='0.0.0.0') line to
port = int(os.environ.get("PORT", 33507))
app.run(host='0.0.0.0', port=port)

Otherwise the app would fail because of a problem with the port when I ran

heroku ps:scale web=1

Starting process with command `python main.py`
...
Web process failed to bind to $PORT within 60 seconds of launch

2) I really needed to use virtualenvwrapper and create a requirements.txt file e.g.

cd <folder with code in it>
mkvirtualenv blackbox

Otherwise heroku wouldn’t know what dependencies my app needed fulfilled to work successfully.

To update requirements.txt after changes,

cd <folder with code in it>
workon blackbox
pip freeze > requirements.txt
deactivate blackbox

3) I needed to make a Procfile:

web: python main.py

Note, this was a toy flask app so not using gunicorn etc. Probably should look into that later:

4) Setting debug mode off probably isn’t essential for deployment but probably a good idea anyway: app.debug = False before deploying.

Some other points: when developing on a different machine, I needed to supply my public key to heroku from that other machine (Permission denied (publickey) when deploying heroku code. fatal: The remote end hung up unexpectedly).

heroku keys:add ~/.ssh/id_rsa.pub

And the full sequence for upgrading your app after the prerequisites have been fulfilled is:

  1. Make sure you have the port set for heroku
  2. Then git to local repo
  3. Then git push to heroku
  4. Then run heroku ps:scale web=1 again
  5. Revert from the heroku port back to local for local testing and dev.

heroku addons:add redistogo

To add redis support – NB need to register credit card to use any add-ons, even if free ones.