UPDATE 2010-04-03: docgecko notes in the comments below that more recent versions of RVM now provide the
passenger_ruby command for using RVM-installed versions of Ruby with Phusion Passenger. This article has been updated with the newer instructions, but RVM’s Passenger instructions are more likely to be up to date. Thanks for the update, docgecko.
I’ve recently starting using Ruby Version Manager (aka rvm) to manage multiple ruby versions on my workstation. So far I’m quite pleased with the ease of use. (My only gripe so far is that the
rvm command is uncomfortably close to
rm — it’s only a matter of time before I shoot myself in the foot).
There is one gotcha. In production I use Phusion Passenger in conjunction with Ruby Enterprise Edition. I would like to use the same environment in development. However, when installing the passenger gem into an rvm-managed ruby installation, the path to the ruby binary (which you need to plug somewhere into your Apache config) will not work. It will have an incorrect gem path, and in my case, that resulted in passenger failing to spin up because it was unable to load the fastthread gem.
/Users/jparker/.rvm/ruby-enterprise-1.8.6-20090610/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- fastthread (LoadError) from /Users/jparker/.rvm/ruby-enterprise-1.8.6-20090610/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require' from /Users/jparker/.rvm/gems/ruby-enterprise/1.8.6/gems/passenger-2.2.5/lib/phusion_passenger/utils.rb:28 from /Users/jparker/.rvm/gems/ruby-enterprise/1.8.6/gems/passenger-2.2.5/bin/passenger-spawn-server:53:in `require' from /Users/jparker/.rvm/gems/ruby-enterprise/1.8.6/gems/passenger-2.2.5/bin/passenger-spawn-server:53
The solution is very clearly printed on the rvm web site. Instead of passing the path to the actual ruby binary to the
PassengerRuby directive, pass in the
RVM_ROOT/bin/passenger_ruby (replacing RVM_PATH with the root of your rvm installation [usually
# Don't do this PassengerRuby /Users/jparker/.rvm/ruby-enterprise-1.8.6-20090610/bin/ruby # Do this instead PassengerRuby /Users/jparker/.rvm/bin/passenger_ruby
The latter is a shell script which execs the actual ruby binary after setting an appropriate
GEM_PATH (among other things).
Copyright © 2014 John Parker, Urgetopunt Technologies LLC.