Pylons

From DreamHost
Jump to: navigation, search

Pylons is a framework for python. In the same way the rails is a framework for ruby. See the official website. Pylons can be deployed via FastCGI on Dreamhost.

Installation

To install Pylons, you must have Python installed, as well as a few other dependencies. By default, all hosts have Python 2.4 installed, but because of permission settings, users are unable to install any new modules (as required for Pylons). Thus, you will need to setup a Virtual Python installation as described in Python#Virtualenv.

wget http://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.5.1.tar.gz
tar xzf virtualenv-1.5.1.tar.gz
python2.4 virtualenv-1.5.1/virtualenv.py $HOME/local

Once your Virtual Python environment is setup, you should install the following dependencies. Note that all of this should be installed in your Virtual Python environment, so you will have to explicitly call that installation of Python and not the system-wide one.

~/local/bin/easy_install pylons
~/local/bin/easy_install sqlalchemy
# Install other dependencies here...

Please note that sqlalchemy is an optional requirement, but is very commonly used with Pylons. Pylons does not explicitly list it as a dependency.

Publishing

To actually serve your Pylons application, there are a few different methods. Currently, the Flup WSGI module seems to be the most stable.

Flup Method

Flup is a WSGI module that connects FastCGI with Python. Make sure your FastCGI is active for the domain you are setting up.

~/local/bin/easy_install Flup

Once Flup is installed, you will need to create a dispatch.fcgi file in your website directory: (Note you must make changes in the marked fields)

#!/home/[my user name]/local/bin/python

import sys

from paste.deploy import loadapp
from flup.server.fcgi_fork import WSGIServer

app = loadapp('config:/home/[my user name]/my-website.com/configuration.ini')
server = WSGIServer(app)
server.run()

Once this is done, you must explicitly tell Apache to redirect to this file when you receive a query:

RewriteEngine On
RewriteBase /
RewriteRule ^dispatch\.fcgi/ - [L]
RewriteRule ^(.*)$ dispatch.fcgi/$1 [L]

Given a few minutes for the Dreamhost web daemons to catch on to the updates, the system should be ready and working!

Paster Serve Method

Paster, the Python server, can be used to run your server, commonly used via the following shell command:

paster serve --reload dev.ini

There are issues with this: (1) you cannot bind on any port below 1024, because they are all taken by Apache (i.e. you can't serve on the regular HTTP port 80) and (2) Dreamhost commonly kills long-serving daemon processes. As part of your Terms of Service, Dreamhost disallows this and is in their right to kill your process.

FastCGI Method

Note that this section contains dead links - you are on your own!

The FastCGI installations apply, except that you don't need to limit the FastCGI script to dispatch.fcgi, other names with .fcgi suffix seem to work too. fcgi.py seems to be more reliable than Flup on Dreamhost.

wget http://svn.saddi.com/py-lib/trunk/fcgi.py

Here is a working script, found in [1].

#!/home/username/bin/python

from paste.deploy import loadapp
from fcgi import WSGIServer

app = loadapp('config:/home/username/www.yourdomain.net/yourini.ini')
server = WSGIServer(app)
server.run()

Passenger WSGI

See Passenger WSGI