How to host Pyblosxom as a WSGI application with Twisted
Note: The stated requirement to download
wsgi_app.pyin the Pyblosxom distribution only applies to Twisted Web 1, not Twisted Web 2, as Twisted Web 2 has WSGI support built in.
Twisted: If you chose to download the release tarball of Twisted Web2, you'll also have to download the 2.4.0 release. If, however, you have checked it out from subversion, you'll have both Twisted Web2 and Twisted. Refer to the Twisted site for more details.
- Get all of the above modules set up. The easiest way is to refer to the
INSTALLfile in each of the downloaded or checked out distributions.
- Create a directory for all of your configuration and run-time files. For example, I use
web/wsgi_app.pyfrom the PyBlosxom distribution in the directory.
- Copy the
config.pyPyBlosxom configuration file into the directory as well, making any customizations that are needed.
I use a
.tac file for my Twisted server configuration. It is simply a set of Python code required to set up the server and its parameters. Here is a minimum working configuration, with no Twisted logging enabled:
from twisted.application import service, strports from twisted.web2 import server, channel, wsgi from twisted.web2.channel import http from wsgi_app import application as pyblosxom_application pyBlosxomResource = wsgi.WSGIResource(pyblosxom_application) site = server.Site(pyBlosxomResource) application = service.Application('web') s = strports.service('tcp:80', channel.HTTPFactory(site)) s.setServiceParent(application)
I could probably make it a bit cleaner, but this is a pared down version of the more complex working version that hosts my sites. You can download and save blog.tac in the directory created above. Be sure to change the port number from
tcp:<custom port number> if you want the server to listen on a different port.
I also wrote a quick script to make it easy to start the blog server. You'll have to modify the pathnames appropriately to your particular setup. Here is the script:
#!/bin/sh cd ~/bin/ export PYTHONPATH=/home/nafai/code/Twisted:/home/nafai/code/pyblosxom-new/pyblosxom:$PYTHONPATH python2.4 /home/nafai/code/Twisted/bin/twistd -y /home/nafai/bin/blog.tac --pidfile=blog.pid --logfile=blog.log
Download and save startblog.sh in the directory created above. Make it executable by doing
chmod +x startblog.sh.
Now try running the blog service (for example, if the configuration files were saved in
You should be able to see your blog if you browse to http://localhost/ with your web browser. If you get a 503 or other error, check blog.log in the ~/bin directory for any tracebacks or errors. Also check the pyblosxom specific log if you have one configured in your
You may run into a bug that I've seen, but haven't taken the time to track down where it is coming from. I am getting this traceback fairly often in my
blog.log file, though everything else seems to run normal:
2006/08/24 22:22 MDT [HTTPChannel,39,127.0.0.1] Traceback (most recent call last): 2006/08/24 22:22 MDT [HTTPChannel,39,127.0.0.1] File "logging/__init__.py", line 737, in emit 2006/08/24 22:22 MDT [HTTPChannel,39,127.0.0.1] ValueError: I/O operation on closed file
I should track this down sometime soon.