Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Passenger RVM Error: cannot load such file -- bundler/setup

I have a Debian server and when I try and run Passenger and navigate to the root directory of my app:

Error:

cannot load such file -- bundler/setup

Environment

deployment@currienet:/$ which ruby
/home/deployment/.rvm/rubies/ruby-1.9.3-p194/bin/ruby
deployment@currienet:/$ ruby --version
ruby 1.9.3p194 (2012-04-20 revision 35410) [i686-linux]
deployment@currienet:/$ which rails
/home/deployment/.rvm/gems/ruby-1.9.3-p194/bin/rails
deployment@currienet:/$ rails --version
Rails 3.2.8
deployment@currienet:/$ which bundle
/home/deployment/.rvm/gems/ruby-1.9.3-p194/bin/bundle
deployment@currienet:/$ gem list bundle
bundler (1.2.1)
deployment@currienet:/$ gem list passenger
passenger (3.0.17)
deployment@currienet:/$ which rvm
/home/deployment/.rvm/bin/rvm
deployment@currienet:/$ rvm --version
rvm 1.16.6 (master) by Wayne E. Seguin <[email protected]>, Michal Papis <[email protected]> [https://rvm.io/]

Apache's passenger.load file

LoadModule passenger_module /home/deployment/.rvm/gems/ruby-1.9.3-p194/gems/passenger-3.0.17/ext/apache2/mod_passenger.so
PassengerRoot /home/deployment/.rvm/gems/ruby-1.9.3-p194/gems/passenger-3.0.17
PassengerRuby /usr/local/bin/ruby

Apache's httpd.conf

<VirtualHost *:80>
      ServerName http://currienet
      # !!! Be sure to point DocumentRoot to 'public'!
      DocumentRoot /var/www/currienet/marketplace/current/public
      <Directory /var/www/currienet/marketplace/current/public >
         # This relaxes Apache security settings.
         Allow from all
        Options -MultiViews
      </Directory>
</VirtualHost>

Bundle

deployment@currienet:/var/www/currienet/marketplace/current$ bundle show
Gems included by the bundle:
  * actionmailer (3.2.8)
  * actionpack (3.2.8)
  * activemodel (3.2.8)
  * activerecord (3.2.8)
  * activeresource (3.2.8)
  * activesupport (3.2.8)
  * arel (3.0.2)
  * bcrypt-ruby (3.0.1)
  * builder (3.0.0)
  * bundler (1.2.1)
  * cocaine (0.2.1)
  * coffee-rails (3.2.2)
  * coffee-script (2.2.0)
  * coffee-script-source (1.3.3)
  * daemon_controller (1.0.0)
  * devise (2.1.2)
  * erubis (2.7.0)
  * execjs (1.4.0)
  * fastthread (1.0.7)
  * haml (3.1.7)
  * haml-rails (0.3.4)
  * hike (1.2.1)
  * i18n (0.6.1)
  * journey (1.0.4)
  * jquery-rails (2.1.1)
  * json (1.7.5)
  * mail (2.4.4)
  * mime-types (1.19)
  * multi_json (1.3.6)
  * orm_adapter (0.4.0)
  * paperclip (3.1.2)
  * passenger (3.0.17)
  * pg (0.14.0)
  * polyglot (0.3.3)
  * rack (1.4.1)
  * rack-cache (1.2)
  * rack-ssl (1.3.2)
  * rack-test (0.6.1)
  * rails (3.2.8)
  * railties (3.2.8)
  * rake (0.9.2.2)
  * rdoc (3.12)
  * sass (3.2.1)
  * sass-rails (3.2.5)
  * sprockets (2.1.3)
  * thor (0.16.0)
  * tilt (1.3.3)
  * treetop (1.4.10)
  * tzinfo (0.3.33)
  * uglifier (1.2.7)
  * warden (1.2.1)
  * will_paginate (3.0.3)

Accounts

I have two accounts on the server: root and deployment.

My app and rvm are installed under deployment but Apache is installed under root (to be able to bind to port 80) Judging by the process list by running ps -fe passenger is being called by apache and is run under root:

root     16159 16155  0 02:08 ?        00:00:00 PassengerWatchdog
root     16165 16159  0 02:08 ?        00:00:00 PassengerHelperAgent
root     16167 16165  0 02:08 ?        00:00:00 Passenger spawn server
nobody   16172 16159  0 02:08 ?        00:00:00 PassengerLoggingAgent
www-data 16179 16155  0 02:08 ?        00:00:00 /usr/sbin/apache2 -k start
www-data 16180 16155  0 02:08 ?        00:00:00 /usr/sbin/apache2 -k start
www-data 16181 16155  0 02:08 ?        00:00:00 /usr/sbin/apache2 -k start
www-data 16182 16155  0 02:08 ?        00:00:00 /usr/sbin/apache2 -k start
www-data 16183 16155  0 02:08 ?        00:00:00 /usr/sbin/apache2 -k start

The root account doesn't have access to rails or bundle in the root path.

.rvmrc & config/setup_load_paths.rb

I have tried following the instructions on the The Path to Better RVM & Passenger Integration Blog and Using RVM rubies with Passenger :

Create an .rvmrc file in the root directory of my app with the command:

rvm use 1.9.3 --rvmrc --create

Which generates the file .rvmrc:

if [[ -d "${rvm_path:-$HOME/.rvm}/environments"
  && -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]]
then
  \. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
  [[ -s "${rvm_path:-$HOME/.rvm}/hooks/after_use" ]] &&
    \. "${rvm_path:-$HOME/.rvm}/hooks/after_use" || true
  if [[ $- == *i* ]] # check for interactive shells
  then echo "Using: $(tput setaf 2)$GEM_HOME$(tput sgr0)" # show the user the ruby and gemset they are using in green
  else echo "Using: $GEM_HOME" # don't use colors in non-interactive shells
  fi
else
  # If the environment file has not yet been created, use the RVM CLI to select.
  rvm --create use  "$environment_id" || {
    echo "Failed to create RVM environment '${environment_id}'."
    return 1
  }
fi

# If you use bundler, this might be useful to you:
 if [[ -s Gemfile ]] && {
   ! builtin command -v bundle >/dev/null ||
   builtin command -v bundle | GREP_OPTIONS= \grep $rvm_path/bin/bundle >/dev/null
 }
 then
   printf "%b" "The rubygem 'bundler' is not installed. Installing it now.\n"
   gem install bundler
 fi
 if [[ -s Gemfile ]] && builtin command -v bundle >/dev/null
 then
   bundle install | GREP_OPTIONS= \grep -vE '^Using|Your bundle is complete'
 fi

And adding the following to config/setup_load_paths.rb

if ENV['MY_RUBY_HOME'] && ENV['MY_RUBY_HOME'].include?('rvm')
  begin
    rvm_path     = File.dirname(File.dirname(ENV['MY_RUBY_HOME']))
    rvm_lib_path = File.join(rvm_path, 'lib')
    $LOAD_PATH.unshift rvm_lib_path
    require 'rvm'
    RVM.use_from_path! File.dirname(File.dirname(__FILE__))
  rescue LoadError
    # RVM is unavailable at this point.
    raise "RVM ruby lib is currently unavailable."
  end
end

# Select the correct item for which you use below.
# If you're not using bundler, remove it completely.

# If we're using a Bundler 1.0 beta
ENV['BUNDLE_GEMFILE'] = File.expand_path('../Gemfile', File.dirname(__FILE__))
require 'bundler/setup'

And started apache by running

sudo /etc/init.d/apache2 restart

I still get the same error.

Unhelpful

I have found the following related questions to be unhelpful (but may be of use to others):

RVM and Passenger: No such file to load - bundler - resolution was leftover configurations from an old virtual host in Apache configuration files.

like image 334
Dr.Seuss Avatar asked Sep 30 '12 11:09

Dr.Seuss


1 Answers

You have

deployment@currienet:/$ which ruby
/home/deployment/.rvm/rubies/ruby-1.9.3-p194/bin/ruby

and

PassengerRuby /usr/local/bin/ruby

this is not what you want. rvm has an option to set up an interpreter to use as passenger's default interpreter. https://rvm.io/integration/passenger/

Also (seeing your last edit) maybe you needto install rvm system-wide, as passenger will run as root.

like image 125
rewritten Avatar answered Sep 28 '22 16:09

rewritten