2013-09-27 115 views
90

我设置的Rails应用4使用Ruby 2.0,但我发现了“Web应用程序无法启动”,并得到此跟踪:无法加载这样的文件 - 捆扎机/设置(LoadError)

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 

现在它正在发挥作用。

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

回答

42

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

有些事情,我在谷歌发现:

23

你最有可能安装一个以上的红宝石。

如果您正在使用RVM,你可能需要运行:

rvm use system 

设置红宝石的版本使用。

http://rvm.io/rubies/default

ruby -v 

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

9

在我的情况下,在安装后客运附加到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所以我花了一段时间,但最后,误差指定的应用程序中使用“PassengerRuby”下面不同的路径,Apache的虚拟主机配置文件中后解决:

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

这情况与我同好。在我的例子中'PassengerDefaultRuby'指的是一个老式的红宝石安装。 – Waseem

7

我与束新鲜的Rails应用程序正确安装了这个错误。评论Gemfile中的弹簧宝石解决了这个问题。

+3

这是我的,但'宝石安装春天'而不是评论出来。 – jakenberg

119

我几乎完全一样的错误,并且能够完全通过运行简单的修复:

gem install bundler 

这可能是您的捆绑安装已损坏或丢失 - 这是在我的情况下发生了什么。请注意,如果上述失败,您可以尝试:

sudo gem install bundler 

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

+2

这就是我!问题 - “sudo”实际上是必需的吗?我用'sudo',但现在我想知道如果没有,会发生什么。 – Pete

+0

就我而言,是的,但我认为这取决于您的操作系统。我最初在Linux Mint 17上做过,但在OSX盒子上,sudo可能没有必要。另外,我已经使用sudo安装了所有其他与Ruby相关的软件。 (糟糕的做法,无论如何,这不是针对面向生产的应用程序)。 –

+2

如果您使用的是不同于系统默认的Ruby版本,则不需要使用'sudo'! 'sudo gem ....'会安装gem默认的版本,(在我的情况下,Ubuntu 14.04)'sudo'不能运行rvm。 – Farfromunique

0

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

要修复,我删除了vendor\bundle,并删除了在我的.bundle/config中对它的引用,所以它不会被重新使用。

于是,我重新捆绑(然后安装到GEM_HOME,而不是vendor/bundle和问题走了

14

你可以尝试运行:

bundle exec rake rails:update:bin 

由于@Dinesh Rails中提到的5:

rails app:update:bin 
0

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

我加了两个GEM_HOME ENV变量和GEM_PATH的.htaccess文件在我的public_html目录(别名在Rails应用程序的公共目录)

他们并不需要以前那么东西必须在主机侧变。在触摸restart.txt文件重新启动乘客服务器后,它出现此错误。

了GEM_PATH由:

回声$ GEM_PATH

通过得到了GEM_HOME:

宝石ENV

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 ruby​​ wrapper集成到乘客配置文件中。

我发现RVM红宝石包装路径用命令:

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; 
相关问题