A couple of recent developments have once again brought web app deployment to the forefront.
First, ThoughtWorks announced that Mingle will run on JRuby. The reason of course is because it makes it much easier to deploy the application. Most enterprises have a J2EE system already installed and configured. By using JRuby, ThoughtWorks can package the application in a war file which can be deployed onto the existing infrastructure.
Second, David started a google group to discuss a standard ruby on rails stack. From what I've heard, deploying a rails app is complicated. Which is one of the reasons why ThoughtWorks went the JRuby way.
What about Django? The standard Django deployment scenario is Apache - mod_python - MySQL/Postgres. Since most of the components are fairly standard and usually already installed, there is no real issue in deployment.
If you have anything non-standard though deployment can quickly become a problem. That really sucks.
Look at desktop apps. You install it and then click a shortcut and it runs. Imagine if you had to copy files all over the place and edit arcane configuration files in order to get a desktop app to run. You wouldn't stand for it! But this is exactly how the web app scenario is.
With the growing popularity of writing a web app for personal and team applications, where the application will be installed by a person or team on one of their own machines, deployment will become a big issue.
I bring this up because the agile tool I wrote had exactly this problem. It's for use by teams and I want teams to be able to set it up without mucking about with complicated deployment and configuration issues.
Luckily, if you are programming in Python, there is a solution to the deployment mess: Simply package everything you require — the python interpreter, a python webserver, an embedded database, django code, your application code — into an executable. Then your web app behaves just like a desktop application. That is exactly what I did with my tool. You can install and run it by running the installer and then clicking the shortcut icon in the start menu — just like a desktop application. Isn't that nice?
For a more detailed explanation on how this was done, check out my post on the other blog: Deploying a Django app on the desktop.