如何从 Ruby 1.9.2 降级到 Ruby 1.8.7 以运行 Rails 2.0.2

Posted

技术标签:

【中文标题】如何从 Ruby 1.9.2 降级到 Ruby 1.8.7 以运行 Rails 2.0.2【英文标题】:How to Downgrade from Ruby 1.9.2 to Ruby 1.8.7 to run Rails 2.0.2 【发布时间】:2011-06-03 19:32:03 【问题描述】:

我想降级我在 Ubuntu 10.04 操作系统上安装的 Ruby 版本(Ruby 1.9.2),以便我可以使用适当版本的 Ruby 1.8.7 来运行 Rails 2.0.2。我将旧版本的 Rails 用于项目目的。

如果我将 Rails 2.0.2 与 Ruby 1.9.2 一起使用,它会给我一个错误,提示无法将 Enumerator 转换为数组。

我认为我可以使用 rvm,但我不确定它是否适合降级。

当我使用命令 rvm list known

时,我在终端中得到以下信息
mgj@pc146724-desktop:~$ rvm list known
# MRI Rubies
[ruby-]1.8.6[-p399]
[ruby-]1.8.6-head
[ruby-]1.8.7[-p302]
[ruby-]1.8.7-head
[ruby-]1.9.1-p243
[ruby-]1.9.1[-p376]
[ruby-]1.9.1-p429
[ruby-]1.9.1-head
[ruby-]1.9.2-preview1
[ruby-]1.9.2-preview3
[ruby-]1.9.2-rc1
[ruby-]1.9.2-rc2
[ruby-]1.9.2[-p0]
[ruby-]1.9.2-head
ruby-head

# JRuby
jruby-1.2.0
jruby-1.3.1
jruby-1.4.0
jruby-1.5.1
jruby-1.5.2
/home/mohnish/.rvm/config/known 

我在使用命令 dpkg -l | 安装的 ruby​​ 软件包列表中得到以下信息。 grep 红宝石

mgj@pc146724-desktop:~$ dpkg -l | grep ruby
ii  libdbm-ruby                                4.2                                             DBM interface for Ruby
ii  libdbm-ruby1.8                             1.8.7.249-2                                     DBM interface for Ruby 1.8
ii  libgdbm-ruby                               4.2                                             GDBM interface for Ruby
ii  libgdbm-ruby1.8                            1.8.7.249-2                                     GDBM interface for Ruby 1.8
ii  libopenssl-ruby                            4.2                                             OpenSSL interface for Ruby
ii  libopenssl-ruby1.8                         1.8.7.249-2                                     OpenSSL interface for Ruby 1.8
ii  libreadline-ruby                           4.2                                             Readline interface for Ruby
ii  libreadline-ruby1.8                        1.8.7.249-2                                     Readline interface for Ruby 1.8
ii  libruby1.8                                 1.8.7.249-2                                     Libraries necessary to run Ruby 1.8
ii  libtcltk-ruby                              4.2                                             Tcl/Tk interface for Ruby
ii  libtcltk-ruby1.8                           1.8.7.249-2                                     Tcl/Tk interface for Ruby 1.8
ii  rdoc                                       4.2                                             Generate documentation from ruby source file
ii  ruby                                       4.2                                             An interpreter of object-oriented scripting 
ii  ruby-elisp                                 4.2                                             Emacs-lisp ruby-mode for Ruby
ii  ruby-full                                  4.2                                             Ruby full installation
ii  ruby1.8                                    1.8.7.249-2                                     Interpreter of object-oriented scripting lan
ii  ruby1.8-dev                                1.8.7.249-2                                     Header files for compiling extension modules
ii  ruby1.8-elisp                              1.8.7.249-2                                     ruby-mode for Emacsen
mgj@pc146724-desktop:~$ ^C

我是否需要卸载 Ruby 1.9.2,然后才能重新安装 Ruby 1.8.7,或者我可以切换版本吗?如果我可以切换版本,请指导我如何设置从 Ruby 1.9.2 到 Ruby 1.8.7 的路径。或者如果有其他方法请告诉我。

如果我必须卸载 Ruby 1.9.2,然后重新安装 Ruby 1.8.7,请告诉我该怎么做。我尝试了以下命令来卸载 Ruby 1.9.2,但似乎没有找到 Ruby 1.9.2 包。

sudo aptitude remove ruby

sudo aptitude remove ruby 1.9.2p0

sudo purge ruby

sudo aptitude purge ruby 1.9.2p0

当我检查当前安装的 Ruby 版本时,它显示:

mgj@pc146724-desktop:~/Downloads/rubygems_postextract/rubygems-1.4.1$ ruby -v
ruby 1.9.2p0 (2010-08-18 revision 29036) [i686-linux]

mgj@pc146724-desktop:~/Downloads/rubygems_postextract/rubygems-1.4.1$ which ruby
/home/mgj/.rvm/rubies/ruby-1.9.2-p0/bin/ruby

感谢您的帮助..!!

【问题讨论】:

【参考方案1】:

RVM 的重点是让您可以拥有多个 Ruby 版本并轻松地在它们之间切换..

rvm install 1.8.7 #or some specific version - choose from the rvm list known
rvm use 1.8.7
rvm gemset create rails202 #create a gemset called "rails202" for Ruby 1.8.7
rvm 1.8.7@rails202 #make the gemset the current selection
gem install rails -v 2.0.2 #install rails (just for this gemset!)
#now, we have a gemset called "rails202" in Ruby 1.8.7.
#anytime we want to use it, we do:
rvm 1.8.7@rails202
#create as many gemsets needed, eg for rails 3.0.3 on Ruby 1.8.7 we can do the
#similar as above. Then to use the new gemset just do:
rvm 1.8.7@rails303
#et voila! we are now using Rails 3.0.3 on Ruby 1.8.7 !

【讨论】:

是的,实际编写 RVM 的 Zabba 和 Wayne E. Seguin .. :)【参考方案2】:

使用 RVM 并为自己节省数周的痛苦。

您可以使用多个 Ruby 版本,每个版本都有自己独立的一组 gem。这样您就可以同时安装 1.8.7 和 1.9.2,同时在前者和后者上分别安装 Rails 2 和 Rails 3 gem。

安装 Ruby 版本就像输入 rvm install 1.9.2rvm install 1.8.7 一样简单。要在两者之间切换:rvm 1.9.2rvm 1.8.7

您可以使用rvm --default 1.9.2rvm --default 1.8.7 设置默认Ruby。

RVM 不会触及您本地的 Ruby,也不会触及宝石。您可以随时切换回它:rvm system

【讨论】:

【参考方案3】:

来源 ~/.rvm/scripts/rvm

rvm reload(重新加载最新安装的rvm)

rvm 安装 1.8.7

rvm 使用 1.8.7 --default

【讨论】:

以上是关于如何从 Ruby 1.9.2 降级到 Ruby 1.8.7 以运行 Rails 2.0.2的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 rvm 将我的 ruby​​ 1.9.2-p0 升级到最新的补丁级别?

如何在 1.9.2 中分析 Ruby 代码?

在 mac 上从 1.1 降级到 OPENSSL 版本 1.0

Ruby 1.9.2 - 读取和解析远程 CSV

ruby 1.9.2 有 is_a 吗?功能?

Ruby on Rails MySQL #08S01Bad handshake - 降级 MySQL?