Loading local gems in cPanel shared host

I had some trouble today figuring out why my Redmine installation wouldn’t start running on my shared server. I received the following error in my log/mongrel.log file:

** Starting Rails with production environment...
Missing the i18n 0.4.2 gem. Please `gem install -v=0.4.2 i18n`

Now, I had finally gotten rid of this problem while using SSH by running

export GEM_PATH=/home/<my username>/ruby/gems

in terminal (or adding it to .bashrc), resulting in successful rake commands and running the server with WEBrick. However, Mongrel seemed to have serious issues with loading the gems in my local files.

This should be solved by adding

ENV['GEM_PATH']= "/home/<my username>/ruby/gems:/usr/lib/ruby/gems/1.8"

to the environment.rb file, but it did not. Apparently this is because Mongrel loads rubygems by itself, ignoring any environment variables set after this. Therefore, the below fine hack by Rui Lopez found on this page, became necessary:

ENV['GEM_PATH']= "/home/<my username>/ruby/gems:/usr/lib/ruby/gems/1.8"
require 'rubygems'; Gem.clear_paths;
Gem.instance_variable_set(:@searcher, nil)

As Rui puts it himself:

[This] clears the internal cache used by rubygems, and forces it to
re-read the GEM_PATH env. variable.

As he also points out, it might not be the cleanest hack, but it works. And that makes me happy.

Published by

Svenn-Arne Dragly

I'm a physicist and programmer, writing about the stuff I figure out as I go.

Leave a Reply