138

我正在使用 Ruby 2.0 设置 Rails 4 应用程序,但我得到“无法启动 Web 应用程序”并得到以下跟踪:

cannot load such file -- bundler/setup (LoadError)
  /usr/local/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:53:in `require'
  /usr/local/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:53:in `require'
  /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/lib/phusion_passenger/loader_shared_helpers.rb:212:in `run_load_path_setup_code'
  /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/helper-scripts/rack-preloader.rb:96:in `preload_app'
  /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/helper-scripts/rack-preloader.rb:150:in `<module:App>'
  /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/helper-scripts/rack-preloader.rb:29:in `<module:PhusionPassenger>'
  /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/helper-scripts/rack-preloader.rb:28:in `<main>'

我的 apache2.conf 是:

LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/buildout/apache2/mod_passenger.so
   PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19
   PassengerDefaultRuby /usr/local/bin/ruby

bundle -v是:

Bundler version 1.3.5

ruby -v是:

ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux]

gem env是:

RubyGems Environment:
  - RUBYGEMS VERSION: 2.1.5
  - RUBY VERSION: 2.0.0 (2013-06-27 patchlevel 247) [x86_64-linux]
  - INSTALLATION DIRECTORY: /usr/lib/ruby/gems/1.8
  - RUBY EXECUTABLE: /usr/local/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/lib/ruby/gems/1.8/bin
  - SPEC CACHE DIRECTORY: /root/.gem/specs
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-linux
  - GEM PATHS:
     - /usr/lib/ruby/gems/1.8
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - https://rubygems.org/
  - SHELL PATH:
     - /root/.gems/bin
     - /usr/lib/ruby/gems/1.8/bin/
     - /usr/local/bin
     - /usr/bin
     - /bin
     - /usr/bin/X11
     - /usr/games
     - /usr/sbin
     - /sbin

echo $GEM_PATH是:

/usr/lib/ruby/gems/1.8:/usr/lib/ruby/gems/1.8

GEM_PATH应该/usr/lib/ruby/gems/2.0吗?

在 apache2.conf 的虚拟主机中,我添加了:

SetEnv GEM_HOME /usr/lib/ruby/gems/1.8

现在它正在工作。

这是解决这个问题的正确方法吗?

4

18 回答 18

219

我遇到了几乎完全相同的错误,只需运行即可完全修复它:

gem install bundler

您的捆绑程序安装可能已损坏或丢失 - 这就是我的情况。请注意,如果上述方法失败,您可以尝试:

sudo gem install bundler

...但通常你可以在没有 sudo 的情况下做到这一点。

于 2016-01-03T10:56:29.950 回答
50

可能是在您安装 2.0 之前,您的系统上安装了以前的 Ruby 环境?这可能有一个现有的 GEM_PATH 指向 /1.8 目录,2.0 版的安装只是保留了该目录。

那么,您可能遇到的问题是,Passenger/Apache 正在 /2.0 目录中查找,而实际上 gem 位于 /1.8 目录中。因此,您明确告诉 apache 使用 /1.8 目录对于解决问题是有意义的。

SetEnv GEM_HOME /usr/lib/ruby/gems/1.8

您也可以尝试使用Ruby 版本管理器来处理多个 Ruby 环境。

我在谷歌上找到的一些东西:

于 2013-09-30T17:00:19.833 回答
29

您很可能安装了多个 Ruby。

如果您使用的是 RVM,您可能需要运行:

rvm use system

设置要使用的 ruby​​ 版本。

http://rvm.io/rubies/default

ruby -v

会告诉你当前使用的版本。

于 2013-10-10T17:38:27.107 回答
28

您可以尝试运行:

bundle exec rake rails:update:bin

正如@Dinesh 在 Rails 5 中提到的:

rails app:update:bin
于 2016-04-18T18:58:00.460 回答
10

就我而言,安装乘客后附加到 apache 配置文件的行如下:

LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-.0.24/buildout/apache2/mod_passenger.so 
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-4.0.24 
PassengerDefaultRuby /usr/bin/ruby1.8

但是该应用程序需要 Ruby 2.0.0,所以我花了一段时间,但最后,在应用程序的 Apache 虚拟主机配置文件中使用下面的“PassengerRuby”指定不同的路径后,错误得到了解决:

...
VirtualHost *:80>
  ServerName www.yourhost.com

 **PassengerRuby /home/user/.rvm/gems/ruby-2.0.0-p247**
  # !!! Be sure to point DocumentRoot to 'public'!
  DocumentRoot /somewhere/public    
  <Directory /somewhere/public>
     # This relaxes Apache security settings.
     AllowOverride all
     # MultiViews must be turned off.
     Options -MultiViews
  </Directory>
</VirtualHost...
于 2013-11-15T22:00:30.253 回答
8

我在正确安装了 bundle 的全新 Rails 应用程序中遇到了这个错误。在 Gemfile 中注释掉 spring gem 解决了这个问题。

于 2015-02-21T06:44:51.830 回答
4

在花了很多时间之后,在下面的代码对我有用之后,实际上尝试遵循这些答案。在这样做之前,请确保更新没有问题:)

gem update --system

于 2020-08-07T18:12:29.633 回答
4

我遇到了同样的问题,但我认为这是由于spring缓存了一些 gem 和配置。我通过运行修复它gem pristine --all

这会将已安装的 gem 从 gem 缓存中的文件恢复到原始状态。

或者你可以试试你的宝石

gem pristine your_gem_name
于 2018-06-11T12:04:27.453 回答
2

其他可能的情况:您在服务器环境中定义了多个用户。在这种情况下,运行

passenger-config --ruby-command

将为您提供必要的命令来使用nginx/sites-enabled/relevant_application您的用例指定您的文件,例如:

passenger-config was invoked through the following Ruby interpreter:
Command: /home/other_user/.rbenv/versions/2.4.5/bin/ruby
Version: ruby 2.4.5p335 (2018-10-18 revision 65137) [x86_64-linux]
To use in Apache: PassengerRuby /home/other_user/.rbenv/versions/2.4.5/bin/ruby
To use in Nginx : passenger_ruby /home/other_user/.rbenv/versions/2.4.5/bin/ruby
To use with Standalone: /home/other_user/.rbenv/versions/2.4.5/bin/ruby /usr/bin/passenger start
于 2019-01-09T14:40:40.130 回答
2

Bundler 版本可能会导致问题。

请安装其他版本号的捆绑程序。

例如,

宝石安装捆绑器-v 1.0.10

于 2019-01-25T03:25:34.537 回答
1

For me the problem was associating RVM Ruby with Passenger. So I needed to integrate RVM ruby wrapper to passenger config file.

I find out rvm ruby wrapper path with command:

passenger-config --ruby-command

I took the path from the result and entered to a passenger config in nginx/passenger.conf:

passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
passenger_ruby /usr/local/rvm/gems/ruby-2.3.1/wrappers/ruby;
于 2017-03-25T14:28:55.140 回答
1

这发生在我的生产环境中。

rm /vendor/bundle

然后 bundle install --deployment

解决了这个问题。

于 2018-11-07T22:01:10.880 回答
0

我通过创建测试rails项目并安装所有gem解决了这个问题,然后我用测试替换了我当前的Gemfile.lock,一切正常。

我认为这个问题来自bundler托管版本,所以请确保托管捆绑器与您的项目版本相同。

于 2019-06-15T18:26:54.887 回答
0

在我的情况下,这是权限问题:

 sudo chmod -R +777 <your_folder_path>
于 2019-08-27T14:08:11.300 回答
0

使用 phusion 乘客的 ruby​​ 版本与您的 rails 应用程序不同。

<IfModule mod_passenger.c>
  PassengerRoot /usr/local/rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/passenger-6.0.2
  PassengerDefaultRuby /usr/local/rbenv/versions/2.5.3/bin/ruby
</IfModule>

确保 httpd 配置上的版本与 rails 应用程序相同。

于 2019-11-18T16:55:13.953 回答
0

注意:我的托管公司是 Site5.com,我有一个托管 VPS。

我将 GEM_HOME 和 GEM_PATH 的环境变量添加到我的 public_html 目录中的 .htaccess 文件中(rails 应用程序中公共目录的别名)

以前不需要它们,所以主机端肯定发生了一些变化。触摸restart.txt文件重新启动乘客服务器后出现此错误。

通过以下方式获得 GEM_PATH:

回声 $GEM_PATH

通过以下方式获得 GEM_HOME:

宝石环境

 RubyGems Environment:
   - RUBYGEMS VERSION: 2.0.14
   - RUBY VERSION: 2.0.0 (2013-11-22 patchlevel 353) [x86_64-linux]
   - INSTALLATION DIRECTORY: /home/username/ruby/gems
   - RUBY EXECUTABLE: /usr/local/ruby20/bin/ruby
   - EXECUTABLE DIRECTORY: /home/username/ruby/gems/bin
   - RUBYGEMS PLATFORMS:
     - ruby
     - x86_64-linux
   - GEM PATHS:
      - /home/username/ruby/gems
      - /usr/local/ruby2.0/lib64/ruby/gems/
   - GEM CONFIGURATION:
      - :update_sources => true
      - :verbose => true
      - :backtrace => false
      - :bulk_threshold => 1000
      - "gem" => "--remote --gen-rdoc --run-tests"
      **- "gemhome" => "/home/username/ruby/gems"**
      - "gempath" => ["/home/username/ruby/gems", "/usr/local/ruby2.0/lib64/ruby/gems/"]
      - "rdoc" => "--inline-source --line-numbers"
   - REMOTE SOURCES:
      - https://rubygems.org/

使用以下行更新了 .htaccess 文件:

SetEnv GEM_HOME /usr/local/ruby2.0/lib64/ruby/gems/
SetEnv GEM_PATH /home/username/ruby/gems:/usr/local/ruby20/lib64/ruby/gems/:/home/username/ruby/gems:/usr/
于 2017-02-16T03:30:30.353 回答
0

我有这个是因为我的vendor/bundle. 与 Apache 无关,仅在本地开发环境中。

为了修复,我删除vendor\bundle了 ,并且还删除了对它的引用,.bundle/config因此它不会被重新使用。

然后,我重新捆绑(然后安装到GEM_HOME而不是,vendor/bundle问题就消失了。

于 2016-02-25T05:39:34.783 回答
0

我有同样的问题,并没有任何运气尝试了所有的答案。

我复制的步骤:

  1. rvm instal 2.1.10
  2. rvm gemset create my_gemset
  3. rvm use 2.1.10@my_gemset
  4. bundle install

但是bundle install安装了Rails,但我仍然得到 cannot load such file -- bundler/setup (LoadError)

终于运行gem install rails -v 4.2修复它

于 2019-01-21T13:18:48.323 回答