Ruby Passenger:没有这样的文件来加载bundler

Tom*_*Tom 6 ruby gem passenger ruby-enterprise-edition

我用Nginx安装了Phusion Passenger,配置Nginx指向正确的目录,然后我运行了webapp目录,这已经下载了gemfiles,但它找不到宝石.

当我访问该网站时,我得到标准的乘客错误页面,其中说:

Error message:
no such file to load -- bundler
Run Code Online (Sandbox Code Playgroud)

这是完整的错误:http://tinypic.com/view.php?pic = vpx36r& s = 7

我做了一个,gem install bundler所以我知道捆绑器已经安装,但我认为它正在寻找宝石的错误位置.

似乎Passenger已经安装了ruby-enterprise-1.8.7,看起来好像1.8已经安装在这个盒子里.

gem env给了我以下内容:

  - RUBYGEMS VERSION: 1.4.2
  - RUBY VERSION: 1.8.7 (2009-12-24 patchlevel 248) [x86_64-linux]
  - INSTALLATION DIRECTORY: /opt/local/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8
  - RUBY EXECUTABLE: /opt/local/ruby-enterprise-1.8.7-2010.01/bin/ruby
  - EXECUTABLE DIRECTORY: /opt/local/ruby-enterprise-1.8.7-2010.01/bin
  - RUBYGEMS PLATFORMS:
      - ruby
      - x86_64-linux
    - GEM PATHS:
      - /opt/local/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8
 - /root/.gem/ruby/1.8
    - GEM CONFIGURATION:
       - :update_sources => true
       - :verbose => true
       - :benchmark => false
       - :backtrace => false
       - :bulk_threshold => 1000
    - REMOTE SOURCES:
       - http://rubygems.org/
Run Code Online (Sandbox Code Playgroud)

从我所看到的,它似乎是一个路径问题,但我不知道解决它的最佳方法是什么.

这是输出

哪个红宝石:

/opt/local/ree/bin/ruby
Run Code Online (Sandbox Code Playgroud)

捆绑:

/opt/local/ree/bin/bundle
Run Code Online (Sandbox Code Playgroud)

我在该目录中运行bundle install,它给了我:

Your bundle is complete! It was installed into ./vendor/bundle
Run Code Online (Sandbox Code Playgroud)

And*_*oni 8

看起来你有一些路径问题(正如你已经说过的那样).尝试检查为什么你有两个不同的ruby安装路径.

我的意思是,根据你的gem env输出,你有一些安装

 /opt/local/ruby-enterprise-1.8.7-2010.01/
Run Code Online (Sandbox Code Playgroud)

但你也有红宝石和bunlder

/opt/local/ree/
Run Code Online (Sandbox Code Playgroud)

所以,从这里开始检查所有路径是否正确和/或你没有任何双重安装(好吧,它只是足以检查你的ENV是否连贯).

另一个问题可能与你的nginx.conf有关,你应该有这样的事情:

[...]
 http {
  passenger_root /your/path/to/passenger/gem;
  passenger_ruby /path/to/ruby;
  [...]
 }
Run Code Online (Sandbox Code Playgroud)

更新(刚刚看到nginx.conf的其他注释):

正如您所看到的,路径存在问题:您有两个用于ruby和gems安装的路径:

/opt/local/ruby-enterprise....
Run Code Online (Sandbox Code Playgroud)

/opt/local/ree
Run Code Online (Sandbox Code Playgroud)

你应该删除后者(不是在phisically,只是审查ENVs指向第一个)

编辑:要更改您的env,您可以将以下行附加到/etc/bash.bashrc(或默认情况下从您的shell加载whaterver文件):

PATH="/opt/local/ruby-enterprise-1.8.7-2010.01/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

然后注销并登录,或者进行快速测试,从shell发出这个命令:

源/etc/bash.bashrc

现在,重试以查看默认情况下使用的二进制文件:

which ruby
which gem
which rake
gem env
...
Run Code Online (Sandbox Code Playgroud)

一切都应该有/opt/local/ruby-enterprise-1.8.7-2010.01/前缀(这是从nginx和乘客配置中使用的).

UPDATE2:从评论中可以看出,你至少有3个ruby安装:

  • 来自/ usr/lib/ruby​​ /中的包管理器的ruby(你使用的是ubuntu linux吗?)
  • / opt/local/ree /中的红宝石/
  • / opt/local/ruby​​-enterprise -....中的红宝石

在这一点上,最好的办法是:

  • 卸载/ opt/local /下的所有rubys及其所有宝石
  • 卸载(purge)系统提供的ruby包(你不需要它)

  • 安装和设置RVM:https://rvm.io

  • 使用RVM重新安装乘客:https://rvm.io/integration/passenger/
  • 修复nginx.conf以使用乘客路径和ruby