无法加载此类文件-捆绑程序/安装程序(LoadError)


128

我正在用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

现在它正在工作。

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

Answers:


49

可能是在安装2.0之前,您的系统上已经安装了以前的Ruby env吗?这可能已经存在一个导致/1.8目录的GEM_PATH,该目录仅安装了2.0版。

那么,您可能遇到的问题是,旅客/ Apache正在/2.0目录中查找,而实际上gems在/1.8目录中。您明确地告诉apache使用/1.8目录,因此可以解决该问题。

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

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

我在Google中找到的一些信息:


202

我几乎有完全相同的错误,只需运行即可完全解决:

gem install bundler

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

sudo gem install bundler

...但是通常您无需sudo就可以做到。


2
这是我!问题- sudo实际必要吗?我曾经用过,sudo但现在我想知道如果不这样做会发生什么。
皮特

2
如果您使用的Ruby版本与系统默认版本不同,则无需使用sudosudo gem ....将安装defaultgem版本,并且(在我的情况下为Ubuntu 14.04)sudo无法运行rvm。
Farfromunique '16

1
在我的macOS系统上,我需要sudo系统默认的ruby,但对于与rvm一起安装的任何版本的ruby都不需要它。
Ben Visness

1
请注意,这是我在最近的Windows更新之后使用适用于Linux的Windows子系统的解决方案。由于某种原因,该更新使我的RVM ruby​​安装消失了。
本富尔顿

1
嗨,我gem 2.7.6和使用ubuntu时遇到的问题一样,该ruby 2.5.0p0怎么办?
TheCrazyProfessor


25

您可以尝试运行:

bundle exec rake rails:update:bin

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

rails app:update:bin

10

在我的情况下,安装passenger后添加到apache config文件中的行如下:

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...

我也是这种情况。就我而言,PassengerDefaultRuby是指红宝石的旧装置。
Waseem

8

我在正确安装了捆绑软件的全新Rails应用程序中遇到此错误。注释掉Gemfile中的spring gem可解决此问题。


4
对我来说就是这样,但gem install spring无需评论。
jakenberg

3

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

这将从位于宝石缓存中的文件将已安装的宝石恢复到原始状态。

或者你可以尝试像你的宝石

gem pristine your_gem_name

1

对我来说,这是在生产环境中发生的。

rm /vendor/bundle

然后 bundle install --deployment

解决了问题。


1

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

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

1

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

我重现的步骤:

  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修复它


1

捆绑软件版本可能会导致此问题。

请安装其他版本的捆绑软件。

例如,

gem安装捆绑程序-v 1.0.10


就我而言,此错误是在安装捆绑程序v2之后发生的。我用解决gem uninstall -a bundler; gem install bundler -v '<2.0'
SergA

0

我之所以这样做是因为我的身体里有坏事vendor/bundle。与Apache无关,仅在本地开发环境中。

为了解决这个问题,我删除了vendor\bundle,并且还删除了对其的引用,.bundle/config因此不会重复使用它。

然后,我重新打包(然后安装到GEM_HOME而不是上vendor/bundle,问题消失了。


0

注意:我的托管公司是Site5.com,并且我具有托管VPS。

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

之前不需要它们,因此在主机方面一定已更改。触摸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/

0

对我来说,问题是将RVM Ruby与Passenger关联。所以我需要将RVM红宝石包装器集成到乘客配置文件中。

我用命令找出rvm ruby​​包装路径:

passenger-config --ruby-command

我从结果中选择了路径,然后输入到乘客配置中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;

0

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

我认为此问题来自bundler托管版本,因此请确保托管捆绑程序与您的项目使用同一版本。


0

在我的情况下,这与权限有关:

 sudo chmod -R +777 <your_folder_path>

-1:切勿将777放在文件或目录上。如果“所有者”,“组”和“其他”之间存在分歧,那是因为这是安全问题。
Florian Doyen

0

使用phusion乘客的红宝石版本的版本与您的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 config上的版本与Rails应用程序相同。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.