====== Replicate Webfaction WSGI setup ======
===== Django =====
Webfaction Django setup use user's apache instance running on custom port which then would be proxied by the main apache process running at the front. I try to replicate this setup on my laptop so I can easily play around with the setup without actually using webfaction server through the slow ssh connection. Webfaction use Centos while my laptop is running Ubuntu 8.04 but look's like the setup can easily be replicate (once you get through the hardest part).
The hardest part seem to get the latest ''mod_wsgi (2.x)'' on ubuntu which still provide 1.x version through apt-get. Actually, the hardest part is to apt-get install all the apache2-devel package + dependecies through my slow Maxis broadband connection. Once you get all the packages, it just a matter of ''./configure'', ''make'', ''make install'' the latest source of ''mod_wsgi 2.x''.
The next step is to mirror up webfaction directory structure on my laptop which look like this:-
$ ls django_env
apache2 bi nlib byteflow
$ ls apache2
bin conf logs var
In ''./apache2/bin'', there's script to start and stop the apache instance:-
#!/bin/bash
export PYTHONPATH=/home/kamal/webapps/django/lib/python2.5/site-packages
/home/kamal/webapps/k4ml_com_var/apache2/bin/httpd -e debug \
-f /home/kamal/webapps/k4ml_com_var/apache2/conf/httpd.conf -k start
#!/usr/bin/env python
import os
stopped = False
# Stop Apache if it's running.
for line in os.popen('ps -o pid,command -u kamal'):
if '/home/kamal/webapps/k4ml_com_var/apache2/conf/httpd.conf' in line:
stopped = True
os.system('kill %s' % line.split()[0])
if not stopped:
print "Apache isn't running."
and the httpd.conf file:-
ServerRoot "/home/kamal/webapps/k4ml_com_var/apache2"
LoadModule dir_module modules/mod_dir.so
LoadModule env_module modules/mod_env.so
#LoadModule log_config_module /usr/lib/apache2/modules/mod_log_config.so
LoadModule mime_module modules/mod_mime.so
LoadModule rewrite_module modules/mod_rewrite.so
#LoadModule wsgi_module modules/mod_wsgi.so
LoadModule wsgi_module modules/mod_wsgi.so
KeepAlive Off
Listen 7165
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog logs/access_log combined
ServerLimit 2
PidFile var/apache.pid
WSGIRestrictStdout Off
WSGIPythonPath /home/kamal/webapps/django/lib/python2.5/site-packages
NameVirtualHost 127.0.0.1:7165
ServerAdmin mail@mail.com
WSGIScriptAlias / /home/kamal/webapps/k4ml_com_var/byteflow/django.wsgi
ServerName var.k4ml.com
#ServerAlias www.site1com
#ErrorLog "logs/site1_errors_log"
WSGIScriptAlias / /home/kamal/webapps/k4ml_com_var/myproject.wsgi
ServerName etc.k4ml.com
#ErrorLog "logs/site2_errors_log"
I'd also copied all the modules in ''/usr/lib/apache2/modules'' and apache2 binary to my local apache enviroment. The reason I need ''mod_wsgi 2.x'' is because 1.x doesn't support opening Python eggs's modules. ''WSGIPythonPath'' directive also need to be set in the ''httpd.conf'' file though the actual webfaction setup just pass it through the wrapper start script.
===== Glashammer =====
Let say we have the application at glas/run.py
from glashammer import make_app, run_very_simple, Response
def hello_view(req):
raise error
return Response('Hello world
')
def setup(app):
app.add_url('/', endpoint='hello/index', view=hello_view)
def create_app():
from os.path import dirname
return make_app(setup, dirname(__file__))
application = create_app()
Just add the following virtual host config:-
WSGIScriptAlias / /home/kamal/webapps/webfaction/glas/run.py
ServerName etc.k4ml.com
#ErrorLog "logs/site2_errors_log"