Debian サーバーがあり、Passenger を実行してアプリのルート ディレクトリに移動しようとすると、次のようになります。
エラー:
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 <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]
Apacheのpassenger.loadファイル
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 の 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>
バンドル
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)
アカウント
サーバーには、root と deployment の 2 つのアカウントがあります。
私のアプリと rvm はデプロイメントの下にインストールされていますが、Apache はルートの下にインストールされています (ポート 80 にバインドできるようにするためps -fe
)
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
root アカウントには、root パスの rails または bundle へのアクセス権がありません。
.rvmrc & config/setup_load_paths.rb
The Path to Better RVM & Passenger Integration BlogおよびUsing RVM rubies with Passengerの指示に従ってみました。
次のコマンドを使用して、アプリのルート ディレクトリに .rvmrc ファイルを作成します。
rvm use 1.9.3 --rvmrc --create
ファイル .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
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'
そして、実行してApacheを開始しました
sudo /etc/init.d/apache2 restart
それでも同じエラーが発生します。
役に立たない
次の関連する質問は役に立たないことがわかりました(ただし、他の人には役立つかもしれません):
RVM と Passenger: No such file to load - bundler - 解決は、Apache 構成ファイル内の古い仮想ホストからの残りの構成でした。