I use Octopress to manage my blogs, which rely on correct ruby gem version to
work. Although Octopress use Bundler to manage the gem dependencies, sometimes a
bundle install does not work out of box. Since everything works fine on
one of my machines, I decided to replicate the exact ruby/gem setup of that
Dump Gem list
First, dump all the gems and version to a text file on the machine that you want to replicate.
$ gem list | tail -n+1 | sed 's/(/--version /' | sed 's/)//' > gemlist
Here we first dump all the gem files using
gem list, then we remove the first
line of the output (
***LOCAL GEMS***), and replace left parenthesis with
--version for later convenience, and remove right parenthesis.
Suppose your app use Bundler, then you should use this command instead of the above one, to make sure the we install exactly the same set of gems for that app.
$ bundle | head -n-2 | cut -d' ' -f2,3 | sed 's/ / --version /' > gemlist
Here since the output of
bundle is a bit different with
gem list, we first
remove the last two lines of the output (see below), then we split each line
using white space and only get the second (gem name) and third (version) parts,
finally we substitute white space with
--version, similar as above.
.... Using stringex 1.4.0 Using bundler 1.7.3 Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
Install the Gems
gemlist file to the machine that you want to install gems on, and use
this command to install the gems. To make sure we have a clean slate, we first
remove all Gems first.
$ gem list | cut -d" " -f1 | xargs sudo gem uninstall -aIx
Then install all the Gems, here we do not install document for sake of time.
$ cat gemlist | xargs -L 1 sudo gem install --no-ri --no-rdoc
Here we use
-L 1 option to tell
xargs to treat each line as a separate
Finally, before you do
rake in your project, remember to delete the
Gemfile.lock file, it may contain some obsolete gems and misleading bundler.