I have a Debian server and when I try and run Passenger and navigate to the root directory of my app:
cannot load such file -- bundler/setup
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/]
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
<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>
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)
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.
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.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With