Ruby, Python, and Java application deployment

Ruby on rails has been getting a lot of attention lately, and rightfully so.  It is cool.  I think it is great to see these kinds of technologies being picked and chosen to do major tasks.   I've always tried to avoid getting religion about programming technologies, just pick the best tool for the job.

So how do you decide to use Rails or Zope over J2EE?  Why do you pick them and what are the wrinkles?   Why not write everything in Python in the first place?   J2EE can be a really nice way to make a web application or any client/server type application,  there are a lot of compelling tools in that space but there can be a learning curve,  I'm not sure if it's becoming easier or if I've been exposed to so many of the different technologies that it's starting to seem easy.  There are enterprise grade tools though.

I have experimented with Zope and it's pretty cool,  there is a good sized community with plenty of code to reuse, it's a well documented system,  it's very easy to quickly produce some fairly cool applications,  the problem I've experienced with it is deployment.   Major versions of Zope aren't always easy to migrate between.  While I love the python programming language,  Zope isn't the only thing in python that can be difficult or troublesome in that regard;  python has no formal application deployment method and by the time I get my workstation setup and running and start deploying python apps I quickly find myself in DLL hell.   While I'm bitching about it,  Perl has this problem too,  there generally is no separation between the language and the libraries that are installed as part of a system. Python app tend to include modules in the standard python directories that are part of python,  there is a "classpath" but most apps don't really do anything with it.  If you change your version of python, you potentially need to change all of the modules, regardless of whether they are pure python or linked to object code.  Not long ago I upgraded GNOME and ended up upgrading dozens of python modules and even python itself because of the python bindings for GNOME and GTK+ and not surprisingly some of the python apps didn't deal with it all without some hiccups.   I understand the problem and it's not entirely Python's problem but it's still annoying.  Python does support loading of classes from zip files but it's still very primitive compared to what Java does with jar files.  It's a nice first step and hopefully python 3000 will start to really leverage it.   I have Java apps that have worked seamlessly when I've changed JDKs under it.

Now that Rails is picking up steam, I've been looking at it to see how app deployment is dealt with.  Is everything thing tightly coupled?   Can I deploy an application with version 1.1 of ruby library foo and then another application on the same system with version 2.0 of library foo?   Java solves those problems and while they may not matter for you blog or your little mom and pop shopping cart,  they can become substantial when an application is in production and a business that is making money is using it.  At a glance it still has the same set of problems that Python and Perl have as far as application deployment go.   Rails apps seem to have a nicer way to deploy apps it's still not there.  If Ruby wants to really separate itself from the free language competition,  they'd develop a robust app deployment model;  I'd switch all the way from python if they did. There is something to be said for just dropping a war or ear file in to a directory and having it unpack itself with all of its libraries and just run.

Posted by Ian S. Nelson Mon, 16 Jan 2006 01:21:00 GMT