5

我有一个 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 BlogUsing 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 配置文件中旧虚拟主机的剩余配置。

4

1 回答 1

7

你有

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

PassengerRuby /usr/local/bin/ruby

这不是你想要的。rvm可以选择设置解释器以用作乘客的默认解释器。https://rvm.io/integration/passenger/

另外(查看您的最后一次编辑)也许您需要在系统范围内安装 rvm,因为乘客将以 root 身份运行。

于 2012-09-30T11:25:27.850 回答