Howdy,
Please take a look at Enhancement #9943 (2) and see what you think. Here's the pitch for this little 5-line patch:
Even though boot.rb has the familiar "Don't change this file..." message, sometimes I want to.
This would allow dynamic control over RAILS_GEM_VERSION and the Version Specification passed to the RubyGems 'gem' method for the rails gem. For example, users could test an app or plugin in a Continuous Integration environment which performs automated regression testing against various old Rails versions.
This patch would also to facilitate my GemInstaller gem, which centrally manages the installation and loading of all gem dependencies and versions, including Rails. Currently, I have to tell people (1) to ignore the dire "Don't change this file..." warning and hack boot.rb if they want to manage the Rails gem version along with the rest of their gems. This is not compatible with Rails upgrades which modify boot.rb, such as changeset [7832] and ticket #9834; users will have to re-modify boot.rb after upgrading.
So, whaddaya think? I'm happy to rewrite this patch however you would like. I thought the simplest and most flexible approach would be to mirror the config/initializers directory approach, which is done in just 5 lines. If you don't like the extra config/preinitializers directory, it could just look for a single hook file like config/preinitializer.rb. This would be one less default dir in /config, but it would be less flexible. For example, I couldn't just have GemInstaller dump a provided geminstaller_preinitilizer.rb file into config/preinitializers, I'd have to modify the single hook file. If it's OK to have an extra dir in config, though, I think the current approach is best
One other note. This patch is untested, because boot.rb would require some refactoring to be testable, and I didn't want to overengineer this patch. For an example of how boot.rb could be more made more testable, see #9834. We could even pull out all of the logic from boot.rb into a class, which would be much easier to test in isolation. I'm definitely up for this if you are interested, but I wanted to do The Simplest Thing That Could Possibly Work as the first cut.
Thanks, -- Chad Woolley
(1) http://geminstaller.rubyforge.org/documentation/tutorials.html#integrating_geminstaller_into_ruby_on_rails (2) http://dev.rubyonrails.org/ticket/9943