Problems with Ruby GEM to RPM

I can’t emphasize more the importance of packaging RPMs ( or any other packaging system ), as I already did it in an earlier post.

Same arguments apply to Ruby Gems as well. That is to say, Ruby Gems already have a gem command to install and update packages. However it is still not a complete packaging system in itself.

Consider the situation where you need to install a gem called A which dependes on B and C. So you will do:

gem install A

Problem 1: Handling of install failure

This would obviously install the gems in this order B, C and A. It does works for mostly perfect situations. However if C fails to install, “gem” won’t rollback ( i.e. uninstall B ) any steps till C’s failure. This is a problem.

Problem 2: Creating RPM packages with ease

If you ever happen to use Python’s distutils, you will find that it has ability to generate RPM packages from the itself. Which means an even wider adoption of Python packages.

python bdist_rpm

What takes for “gem” to support such a functionality? Since creating, installing, packaging and distributing Ruby gems is such a common activity for Ruby developers, I believe such should be available within the standard Ruby distribution.

For now I am using gem2rpm gem which requires a lot of manual intervention. Here is how it works ( as in my earlier post ):

gem fetch rubygem-my-favorite
gem2rpm -s rubygem-my-favorite.gem

Checkout its documentation for more details.