【问题标题】:Rails 2.1.0 Gem Missing - RVM, Passenger, ApacheRails 2.1.0 Gem 缺失 - RVM、Passenger、Apache
【发布时间】:2012-01-11 01:52:15
【问题描述】:

昨天我试图修复 readline 控制台问题(在 irb 中复制/粘贴速度慢),但我无法修复 - 但肯定是我的 rvm 设置搞砸了。

Ubuntu 11.10。

首先我的问题:无法通过虚拟主机加载网站,只能通过脚本/服务器加载。通过虚拟主机加载时,我得到了这个:

Missing the Rails 2.1.0 gem. Please `gem install -v=2.1.0 rails`,
update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails
version you do have installed, or comment out RAILS_GEM_VERSION to use
the latest version installed.

Gem 列表显示(为清楚起见进行了编辑 - 请注意,mysql、rails 2.1 和乘客都显示在列表中 - 它是从 global 和 myapp21 gemsets 中获取的):

tom@DEVPC2:/var/www/myapp$ gem list

*** LOCAL GEMS ***
....
actionmailer (2.1.0)
actionpack (2.1.0)
activerecord (2.1.0)
activeresource (2.1.0)
activesupport (2.1.0)
bundler (1.0.21)
capistrano (2.9.0)
mysql (2.8.1)
passenger (3.0.11)
rack (1.3.5)
rails (2.1.0)
rake (0.9.2.2)
...

所以,到目前为止我尝试过的事情如下:

我已经完全删除了所有 gemsets、rubys(只有一个,1.8.7),然后是 rvm 本身。从guide 重新安装。向 gemset global 添加了乘客、捆绑器(不用于此项目)和 capistrano。为 apache2 安装了乘客模块(passenger-install-apache2-module),按照说明将负载乘客的东西添加到 /etc/apache2/apache2.conf:

LoadModule passenger_module /home/tom/.rvm/gems/ruby-1.8.7-p352@global/gems/passenger-3.0.11/ext/apache2/mod_passenger.so
PassengerRoot /home/tom/.rvm/gems/ruby-1.8.7-p352@global/gems/passenger-3.0.11
PassengerRuby /home/tom/.rvm/wrappers/ruby-1.8.7-p352@global/ruby

然后:rvm gemset create myapp21 - 继续在 gemset 中安装 rails 2.1.0、mysql 和其他 gem。

设置 myapp/.rvmrc:

rvm use ruby-1.8.7-p352@myapp21

还有 config/setup_load_paths.rb:

if ENV['MY_RUBY_HOME'] && ENV['MY_RUBY_HOME'].include?('rvm')
  begin
    rvm_path     = File.dirname(File.dirname(ENV['MY_RUBY_HOME']))
    rvm_lib_path = File.join(rvm_path, 'lib')
    $LOAD_PATH.unshift rvm_lib_path
    require 'rvm'
    RVM.use_from_path! File.dirname(File.dirname(__FILE__))
  rescue LoadError
    # RVM is unavailable at this point.
    raise "RVM ruby lib is currently unavailable."
  end
end

我有我的虚拟主机:

tom@DEVPC2:/var/www/myapp$ cat /etc/apache2/sites-enabled/myapp.local 
<VirtualHost *:80>
   ServerName myapp.local
   RailsEnv development
   DocumentRoot /var/www/myapp/public
   <Directory /var/www/myapp/public>
      AllowOverride all
      Options -MultiViews
   </Directory>
</VirtualHost>

现在一些信息:

tom@DEVPC2:/var/www/myapp$ rvm info    
ruby-1.8.7-p352@myapp21:

  system:
    uname:       "Linux DEVPC2 3.0.0-13-generic-pae #22-Ubuntu SMP Wed Nov 2 15:17:35 UTC 2011 i686 i686 i386 GNU/Linux"
    bash:        "/bin/bash => GNU bash, version 4.2.10(1)-release (i686-pc-linux-gnu)"
    zsh:         " => not installed"

  rvm:
    version:      "rvm 1.10.0-pre by Wayne E. Seguin (wayneeseguin@gmail.com) [https://rvm.beginrescueend.com/]"

  ruby:
    interpreter:  "ruby"
    version:      "1.8.7"
    date:         "2011-06-30"
    platform:     "i686-linux"
    patchlevel:   "2011-06-30 patchlevel 352"
    full_version: "ruby 1.8.7 (2011-06-30 patchlevel 352) [i686-linux]"

  homes:
    gem:          "/home/tom/.rvm/gems/ruby-1.8.7-p352@myapp21"
    ruby:         "/home/tom/.rvm/rubies/ruby-1.8.7-p352"

  binaries:
    ruby:         "/home/tom/.rvm/rubies/ruby-1.8.7-p352/bin/ruby"
    irb:          "/home/tom/.rvm/rubies/ruby-1.8.7-p352/bin/irb"
    gem:          "/home/tom/.rvm/rubies/ruby-1.8.7-p352/bin/gem"
    rake:         "/home/tom/.rvm/gems/ruby-1.8.7-p352@global/bin/rake"

  environment:
    PATH:         "/home/tom/.rvm/gems/ruby-1.8.7-p352@myapp21/bin:/home/tom/.rvm/gems/ruby-1.8.7-p352@global/bin:/home/tom/.rvm/rubies/ruby-1.8.7-p352/bin:/home/tom/.rvm/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
    GEM_HOME:     "/home/tom/.rvm/gems/ruby-1.8.7-p352@myapp21"
    GEM_PATH:     "/home/tom/.rvm/gems/ruby-1.8.7-p352@myapp21:/home/tom/.rvm/gems/ruby-1.8.7-p352@global"
    MY_RUBY_HOME: "/home/tom/.rvm/rubies/ruby-1.8.7-p352"
    IRBRC:        "/home/tom/.rvm/rubies/ruby-1.8.7-p352/.irbrc"
    RUBYOPT:      ""
    gemset:       "myapp21"

使用脚本/服务器允许我加载到 localhost:3000(或任何指定的端口)。但是我无法加载 myapp.local,而昨天我还可以这样做 - 它告诉我 rails 丢失了。

我认为正在发生的事情: 乘客正在加载 ruby​​,虚拟主机的东西仍在工作,但由于某种原因,它没有从 setup_load_paths 获取指令来加载基于 rvmrc 的 gemset(我不完全确定这是否会发生,但如果是的话,那就是不这样做)。

我的下一步是全新安装。刚刚把这台机器设置好,不想在这上面浪费我的周末。

【问题讨论】:

    标签: ruby-on-rails rvm passenger


    【解决方案1】:

    我回去并删除了乘客宝石,将其安装到全局等。没有运气。

    回到the guide 并准确地复制了 setup_load_paths 和 .rvmrc (嗯,并更改为适合我的路径),现在可以正常工作了。我想我那里出了点问题。

    【讨论】:

      【解决方案2】:

      我今天在将 Rails 2.x 应用程序迁移到新服务器时遇到了同样的问题。原来错误是不正确的。 Rails 2.x 应用程序中的 boot.rb 文件可以从 any 带有该消息的 gem 错误中解救出来。

      我打开了 config/boot.rb 并注释掉了下面的行(在这个 bug 中描述的问题中产生错误消息的行)。然后显示的错误变得有意义(gem 的多个冲突版本 -- 不是 Rails gem),我能够解决问题。

      #rescue Gem::LoadError => load_error
      #  $stderr.puts %(Missing the Rails #{version} gem. Please `gem install -v=#{version} rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.)
      #  exit 1
      

      【讨论】:

        【解决方案3】:

        由于没有人有任何想法,我这个周末格式化了我的电脑。同样的问题。

        从全局卸载乘客 gem 并将其放入我的特定 gemset 中,passenger-install-apache2-module 是否使配置文件代码指向该 gemset。它现在可以工作了,但是我将如何处理我的其他项目。

        【讨论】:

        • 请使用您问题上的编辑链接添加其他信息。 Post Answer 按钮应仅用于问题的完整答案。 - From Review
        • @sadaf2605 这是如何编辑的?它提供了一个解决方案;具体来说,passenger-install-apache2-module 有效。这不是最佳解决方案,但它不是我们应该从审查中删除的东西。复习时请注意并仔细阅读所有内容。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多