无法加载这样的文件 – bundler / setup(LoadError)

我使用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_PATHGEM_PATH/usr/lib/ruby/gems/2.0吗?

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

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

现在它正在工作。

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

在安装2.0之前,可能是在系统上安装了以前的Ruby env? 这可能有一个现有的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版本pipe理器来处理多个Ruby环境。

我在Google中发现的一些内容:

我有几乎完全相同的错误,并能够完全解决它只需运行:

 gem install bundler 

这可能是您的捆绑软件安装损坏或丢失 – 这就是我的情况。 请注意,如果上述失败,您可以尝试:

 sudo gem install bundler 

…但通常你可以做到没有sudo。

你最有可能安装了不止一个Ruby。

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

 rvm use system 

设置要使用的ruby的版本。

请参阅http://rvm.io/rubies/default

 ruby -v 

会告诉你你正在使用的版本。

你可以尝试运行:

 bundle exec rake rails:update:bin 

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

 rails app:update:bin 

在我的情况下,安装乘客后附加到apacheconfiguration文件的行如下:

 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虚拟主机configuration文件中,使用下面的“PassengerRuby”指定不同的path后,错误得到了解决:

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

我正确安装了一个新的Rails应用程序中出现这个错误。 在Gemfile中注释出这个弹簧gem解决了这个问题。

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

为了解决这个问题,我删除了vendor\bundle ,并且在我的.bundle/config删除了对它的引用,所以它不会被重用。

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

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

我将GEM_HOME和GEM_PATH的envvariables添加到我的public_html目录中的.htaccess文件(Rails应用程序中的公用目录的别名)

之前不需要它们,所以主机方面必须改变。 碰到restart.txt文件重启乘客服务器后出现这个错误。

通过以下方式获得GEM_PATH:

echo $ GEM_PATH

通过以下方式获得了GEM_HOME:

gem环境

  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/ 

对我来说,问题是将RVM Ruby与Passenger关联起来。 所以我需要将RVM ruby​​ wrapper集成到乘客configuration文件中。

我用命令找出rvm ruby​​ wrapperpath:

 passenger-config --ruby-command 

我从结果中得到了path,并input到nginx/passenger.conf一个乘客configuration中:

 passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini; passenger_ruby /usr/local/rvm/gems/ruby-2.3.1/wrappers/ruby;