views:

140

answers:

4

Hopefully the last question in choosing an implementation language for this web app, but before pitching to anyone, we would like to know what your experiences are with maintaining an application.

We maintained (and since moved to a hosted solution) a web portal based on Perl.

The problem was that we had cases where Perl was updated or a module was updated, and since the whole website was interconnected, it easily became a nightmare because one small change in the CPAN modules could cause the whole website to die (this was an open source portal, we didn't create it) because something in the portal was very specific about what version module it would accept.

There were a couple times where an innocuous set of security updates could cause the website to come crashing apart for a noticeable period of time.

So, in deciding to create a web app based on PHP, Django, or Ruby on Rails, can people share what maintenance on the website has entailed when upgrading all or parts of the framework or language?

How "easy" it is to break or glitch the web application when just trying to install a security fix for a module/gem you didn't create? Or isn't it really an issue?

A: 

With Django, I have never had any issues when upgrading between point revisions (some of my projects have been bitrotting since 0.96 or so, so they were more complex). As far as reusable apps goes, it really depends on the app. By and large, though, developers that are disciplined enough to release their apps (rather than assuming people will run the development version) tend to be good at ensuring migration between versions is painless.

Daniel Watkins
+2  A: 

If I were deploying a python app these days, I would certainly check out virtualenv.

From their page:

virtualenv is a tool to create isolated Python environments.

The basic problem being addressed is one of dependencies and versions, and indirectly permissions. Imagine you have an application that needs version 1 of LibFoo, but another application requires version 2. How can you use both these applications? If you install everything into /usr/lib/python2.4/site-packages (or whatever your platform's standard location is), it's easy to end up in a situation where you unintentionally upgrade an application that shouldn't be upgraded.

Or more generally, what if you want to install an application and leave it be? If an application works, any change in its libraries or the versions of those libraries can break the application.

Tiago
A: 

Just include some regression tests in your tests.py. If you are not testing, you are doing it wrong...

DZPM
He's not asking how to find out if the code has been broken, but rather the best way to avoid breaking it when dependencies have changed.
dmanxiii
A: 

Python's easy_install and distutils give you a pretty solid way to identify what versions you require. There are rarely surprise security changes that invalidate the interfaces.

S.Lott