Categories
Technology

Running a bottle.py app on Dreamhost

I wrote the Stack Monthly site on the one file Bottle framework, since my needs were really bare bones. But when I tried to get it running on Dreamhost, I had to struggle quite a lot, because there was no documentation to show how to do it.

Only past midnight, did it dawn on me that there is no documentation, because it is so darn simple! So as a note to self, and to save someone an hour or two, here’s how to run a Bottle app on Dreamhost.

In a rush? Get the code at github.

Setup a domain

Follow the steps listed in the wiki, to setup Python/Passenger support for a domain.

Create a passenger_wsgi.py

This is where the Apache Passenger module hooks into our application. There are 4 steps needed to create this file.

Set the path

All dreamhost documentation on python advises that you setup a virtual environment. Since bottle has no dependencies this is not needed. Instead just add the current directory, where bottle.py resides, into the system path.

import os, sys 

Passenger hook method

def application(environ, start_response): 

Write a main method

This will be used to run a development server, in debug mode and auto reload.

if __name__ == "__main__": 

Write your application

Well, you will need to write your own application :)

@route('/') 

That’s it, save it as passenger_wsgi.py.

For local development, run it as

python passenger_wsgi.py

on dreamhost, stuff will just happen.

Additional notes

Create restart.txt

To restart your application on dreamhost, run this command:

touch tmp/restart.txt

in the base folder, i.e. the parent of the public folder defined in the “Web directory” of the dreamhost domain setup.

Server static files directly

It is better to let apache/passenger take care of serving static files. Any file found in the public directory will be served directly and bottle routing will not be called.

For local development, define routes to server static files out of public directory.

@route('/css/:file') 

Full code listing on github.