Basing an architecture on plugins

I’m a bit concerned at the fact that the Rails community is relying more heavily on plugins to deliver functionality than building that functionality into Rails. It’s a good idea on paper, but in practice you’ll find that it’s not uncommon for two plugins to stomp on each other. The asset_packager and distributed_assets plugins both override the compute_public_path method in Rails, and step on each other. There’s a similar story with the conditional_cache plugin and the caching-plugin.

Fortunately for me, in all of these cases, Rails core decided the features that these plugins provide are worth including in core and some form of them will be in Rails 2.0. I can only imagine that the proliferation of plugins is going to bring up this problem again and again, however. Because Ruby is a dynamic language, you practically get a plugin architecture for free. The problem is that it’s totally unstructured, and people can clobber one another’s methods at will.