First: Grab JewelryBox.app so you can easily flip through and see what's in all your gemsets.
Second: Set up RVM as it was meant to be. cd override and all.
Third: Your @global gemsets for MRI variants should have only the following gems:
For JRuby, there will be a couple others, like jruby-launcher, jruby-openssl, and bouncy-castle-java, but keep the environment MINIMAL!
Notice that I very explicitly did not put Foreman in here. If you do so, then you'll need to add bundle exec in all your Procfile entries.
You can omit Bundler if you wish, and install it into the per-project gem environment, but then you need a network connection handy just to kick-start a new Bundler-based project. Probably not worth the hassle.
Fourth: Stop inter-project version chaos by giving each project you have a .rvmrc file that looks like this:
rvm use --create ruby-X.Y.Z-pWWW@projectname
This will confine version chaos to being per-project. You'll never have a project bleed over onto others and create version chaos ever again.
Fifth: Stop intra-project version chaos by doing gem cleanup after every bundle install, or bundle update.
Sixth: In projects where you need it, add Foreman to the Gemfile, in a group off to the side. Something like this:
gem 'foreman', groups: 'cli'
Voila! No more version hell, no more "bundle exec", and that's that.
Addendum You may be wondering what purpose Rake servers in the global gemset. Simply put: This lets you avoid having a high overhead to launching Rake as your Gemfile grows in size and complexity. You can choose to load the Bundler environment by adding a block to the top of your Rakefile, but you needn't load the whole world in the process:
require 'rubygems' require 'bundler' Bundler.setup(:default, :rake)
This will load any gems in the default group (no group specified), and any in the :rake group, but won't create hassles by loading anything else. You can specify whichever groups you want here.