demo app shows how to deploy a tornado based web app on OpenShift
Python Shell
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Tornado on OpenShift

Tornado is an open source version of the scalable, non-blocking web server and tools that power FriendFeed.

This article describes how to deploy a Tornado web application on OpenShift. It has been updated to leverage the DIY cartridge introduced in late March. We will deploy Tornado in a custom tailored virtualenv.

To create our new app on OpenShift:

rhc app create hellotornado -t diy-0.1 --from-code=
cd hellotornado

Code from the remote repository will be automatically cloned to your current directory.

Go at http://hellotornado-$ and enjoy!

What it does

You can achieve the same by doing the following steps manually. Create a virtualenv in `misc/` (and don't forget to create this on a python2.6 system, as that is the version of python hosted on OpenShift):

virtualenv --no-site-packages misc/virtenv

Activate your virtualenv and install the needed modules:

source misc/virtenv/bin/activate
pip install tornado
pip install futures
pip install pycurl

Now, assuming your app is in, create your start file (diy/

#!/usr/bin/env python
import os
cwd = os.path.dirname(os.path.abspath(__file__))
os.environ['PYTHON_EGG_CACHE'] = os.path.join(cwd, '..', 'misc/virtenv/lib/python2.6/site-packages')
virtualenv = os.path.join(cwd, '..', 'misc/virtenv/bin/')
execfile(virtualenv, dict(__file__=virtualenv))

import app

Make sure your binary file is executable:

chmod a+x diy/

Delete the `diy/index.html` file or you'll always get only the standard welcome page after pushing the code:

rm diy/index.html

Create the start/stop scripts (these are examples to start with):

$ more .openshift/action_hooks/start 
# The logic to start up your application should be put in this
# script. The application will work only if it binds to
nohup ${OPENSHIFT_REPO_DIR}/diy/ > ${OPENSHIFT_DIY_LOG_DIR}/hellotornado.log 2>&1 &
$ more .openshift/action_hooks/stop 
# The logic to stop your application should be put in this script.
kill `ps -ef | grep hellotornado | grep -v grep | awk '{ print $2 }'` > /dev/null 2>&1
exit 0

Finally, commit and push your project:

git add .
git commit -a -m "Initial commit"
git push

To run and test you application locally before committing, just source the virtualenv activate file and start with the custom made start/stop scripts.

Have fun!