I'm Paul Bissex. I build web applications using open source software, especially Django. Started my career doing graphic design for newspapers and magazines in the '90s. Then wrote tech commentary and reviews for Wired, Salon, Chicago Tribune, and others you never heard of. Then I built operations software at a photography school. Then I helped big media serve 40 million pages a day. Then I worked on a translation services API doing millions of dollars of business. Now I'm building the core platform of a global startup accelerator. Feel free to email me.
I co-wrote "Python Web Development with Django". It was the first book to cover the long-awaited Django 1.0. Published by Addison-Wesley and still in print!
Built using Django, served with gunicorn and nginx. The database is SQLite. Hosted on a FreeBSD VPS at Johncompanies.com. Comment-spam protection by Akismet.
Bitbucket, Debian Linux, Django, Emacs, FreeBSD, Git, jQuery, LaunchBar, macOS, Markdown, Mercurial, Python, S3, SQLite, Sublime Text, xmonad
At least 236720 pieces of comment spam killed since 2008, mostly via Akismet.
My personal record of using revision control for source code has been pretty spotty. Today I took steps toward fixing that by working out a system for managing my Django projects. I wanted revision control (Subversion), I wanted Django's "runserver" for development and mod_python for deployment, and I didn't want it to be a pain.
Some highlights of the process:
I used my pastebin site as the test mule. I checked in the current live site's source code, created "trunk", "tags", and "branches" directories per the Subversion manual, and checked out a copy of the trunk into a staging directory.
I used svn propedit svn:ignore
to keep the project's SQLite database file out of the repository. Via my ~/subversion/config
file I also ignore few other things such as .pyc files, just so that svn status
checks aren't littered with question marks on those files.
I created a simple runserver.sh
script that sets $PYTHONPATH (so that imports like from pasteproject import settings
find the staging version, not my deployed version!) and starts the Django development server.
Tricky Django thing #1: I use the conditional URLconf trick in order to correctly serve media files when using the development server. The docs on this trick go on to say; "the catch here is that you'll have to remember to set DEBUG=False in your production settings file." Which brings me to...
Tricky Django thing #2: Modular settings. The first line of settings.py
is: from pasteproject.settings_local import DEBUG, TEMPLATE_DEBUG, PROJECT_BASE
. The file settings_local.py
is not under version control, and is of course different for the development and deployment versions. It's only two lines; the first line sets DEBUG
and TEMPLATE_DEBUG
to True
(development) or False
(deployment); the custom setting PROJECT_BASE
is used to locate the correct SQLite database file and the media files.
All this was a bit of work, but what it saves me in time and worry will more than make up for that.
Cool! I love seeing the recipes people come up with to handle deployment.
My current setup is a little different now. I no longer use a settings_local.py; I put a conditional in settings.py itself sort of like your if os...
line to control DEBUG
etc. I have a setting called PROJECT_BASE
which is used by MEDIA_ROOT
and other settings that reference the filesystem.
I no longer need the conditional URLconf trick that I linked to; if the site is running on Apache (as opposed to Django's runserver), a SetHandler None
directive keeps Django from seeing any requests for static media.
I hope that we can start to incorporate some of these patterns (suitably generalized) into the framework itself as time goes on.
How things get better after you screw up at work
How I became a software engineer, 8-bit version
My 100x ROI as accidental domain speculator
Neo4J and Graph Databases
1 comment
Jacinto
Neo4J and Graph Databases
500 days ago
ANOTHER SPAMMER WITH BROKEN SOFTWARE
How to install the open source application Darktable on OS X
1505 days ago
SPAMMER WHOSE COMMENT GENERATOR IS BROKEN
How to install the open source application Darktable on OS X
1516 days ago
Alfred Nutile
Switching from OS X to Ubuntu
1557 days ago
Spammer
The story of dpaste.com 2.0
1735 days ago
Copyright 2019
by Paul Bissex
and E-Scribe New Media
For my Django work I'm usually developing on a windows Desktop or Laptop. When my stuff gets deployed it goes up to our linux servers.
In my urls.py files I do something like this: