I’m running Mac OSX 10.6.4 and have installed RVM. Its been great so far, I really love the way it lets me manage having multiple versions of rails and ruby on the same machine without headaches!
However, I don’t want to have to install certain gems (such as passenger) for each setup. Is there a way to share gems between gemsets? I have a [email protected] and [email protected], can I have gems such as passenger, mysql, and capistrano installed once and used with all versions?
There is something called the global gemset, and it is shared between all your gemsets of a certain ruby-version. But you can’t share gems between ruby-versions.
However, what you can do is create a list of gems that will be installed automatically when adding a new ruby version. That is described here. In short: edit a file called
~/.rvm/gemsets/global.gems to contain the list of gems you want to be there for each ruby-version.
Hope it helps.
With the latest RVM version (1.17.0 and newer) just type:
rvm @global do gem install passenger
rvm [email protected] do gem install passenger if you need it only for a specific version of ruby.
You can create and use global gemsets with the following commands:
rvm gemset create global rvm gemset use global
After you’ve created and execute use for the global gemset simply install gems as usual:
gem install mysql passenger
add the the gems you want for every gemset in a “global” rvm gemset name i.e.
then project specific gemsets
rvm [email protected] will already have you’re “default” gems from your global list
Create and use a global gem as:
rvm use <ruby version>@global --create
and install gems you want to share between gemsets:
bundle install <gem name>
but these gems can only be shared between gemsets of the same Ruby version.
According to the RVM documentation, there are actually a number of “global” gemsets which can be defined at the rvm-wide level, per interpreter, per interpreter version, and finally at a specific patch-level per interpreter. And installed gems cascade from one level to the next.