我有一个 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 和部署。
我的应用程序和 rvm 安装在部署下,但 Apache 安装在 root 下(以便能够绑定到端口 80)通过运行ps -fe
乘客的进程列表判断正在由 apache 调用并在 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
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 和乘客:没有这样的文件要加载 - 捆绑器- 解析是 Apache 配置文件中旧虚拟主机的剩余配置。