【问题标题】:cannot load such file -- bundler/setup (LoadError)无法加载此类文件 -- 捆绑器/设置 (LoadError)
【发布时间】:2013-10-04 09:37:35
【问题描述】:

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

现在它正在工作。

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

【问题讨论】:

    标签: rubygems ruby-on-rails-4 passenger ruby-2.0


    【解决方案1】:

    可能是在您安装 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 Version Manager 来处理多个 Ruby 环境。

    我在 Google 上找到的一些东西:

    【讨论】:

      【解决方案2】:

      您很可能安装了多个 Ruby。

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

      rvm use system
      

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

      http://rvm.io/rubies/default

      ruby -v
      

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

      【讨论】:

        【解决方案3】:

        在我的例子中,安装乘客后附加到 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...
        

        【讨论】:

        • 我也是这种情况。就我而言,PassengerDefaultRuby 指的是旧的 ruby​​ 安装。
        【解决方案4】:

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

        【讨论】:

        • 这是给我的,但 gem install spring 而不是注释掉。
        【解决方案5】:

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

        gem install bundler
        

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

        sudo gem install bundler
        

        ...不过一般不用 sudo 也可以。

        【讨论】:

        • 这就是我!问题——sudo 真的有必要吗?我使用了sudo,但现在我想知道如果我不使用会发生什么。
        • 如果您使用的 Ruby 版本与系统默认版本不同,则无需使用 sudosudo gem .... 将安装 gem 的 default 版本,并且(在我的情况下,Ubuntu 14.04)sudo 无法运行 rvm。
        • 在我的 macOS 系统上,我需要 sudo 作为系统默认的 ruby​​,但对于我使用 rvm 安装的任何版本的 ruby​​ 都不需要它。
        • 请注意,这是我在最近的 Windows 更新后使用适用于 Linux 的 Windows 子系统的解决方案。出于某种原因,更新吹走了我的 RVM ruby​​ 安装。
        • 你好,我和gem 2.7.6ruby 2.5.0p0一起使用ubuntu的问题有同样的问题怎么办?
        【解决方案6】:

        我有这个是因为我的vendor/bundle 中有一些不好的东西。与 Apache 无关,仅在本地开发环境中。

        为了解决这个问题,我删除了vendor\bundle,并在我的.bundle/config 中删除了对它的引用,因此它不会被重新使用。

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

        【讨论】:

          【解决方案7】:

          你可以尝试运行:

          bundle exec rake rails:update:bin
          

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

          rails app:update:bin
          

          【讨论】:

            【解决方案8】:

            注意:我的托管公司是 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/
            

            【讨论】:

              【解决方案9】:

              对我来说,问题在于将 RVM Ruby 与Passenger 相关联。所以我需要将 RVM ruby​​ 包装器集成到乘客配置文件中。

              我用命令找出 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;
              

              【讨论】:

                【解决方案10】:

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

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

                或者你可以试试你的宝石,比如

                gem pristine your_gem_name
                

                【讨论】:

                  【解决方案11】:

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

                  rm /vendor/bundle

                  那么 bundle install --deployment

                  解决了这个问题。

                  【讨论】:

                    【解决方案12】:

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

                    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
                    

                    【讨论】:

                      【解决方案13】:

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

                      我复制的步骤:

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

                      【讨论】:

                        【解决方案14】:

                        Bundler 版本可能会导致问题。

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

                        例如,

                        gem install bundler -v 1.0.10

                        【讨论】:

                        • 在我的情况下,这个错误是在安装 bundler v2 之后发生的。我用gem uninstall -a bundler; gem install bundler -v '&lt;2.0'解决它。
                        【解决方案15】:

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

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

                        【讨论】:

                          【解决方案16】:

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

                           sudo chmod -R +777 <your_folder_path>
                          

                          【讨论】:

                          • -1 :永远不要将 777 放在文件或目录上。如果“所有者”、“组”和“其他”之间存在分歧,那是因为这是一个安全问题。
                          【解决方案17】:

                          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 app 上的版本相同。

                          【讨论】:

                            【解决方案18】:

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

                            gem update --system

                            【讨论】:

                            • 你是最棒的!
                            猜你喜欢
                            • 1970-01-01
                            • 1970-01-01
                            • 2016-01-10
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 2017-01-26
                            • 2014-11-23
                            • 1970-01-01
                            相关资源
                            最近更新 更多