Ubuntu Linux下ruby 1.9.1和Rails 2.3升级记录

阅读更多

安装ruby

  1. 首先不再使用ubuntu的apt-get安装ruby,自己编译安装,这样虽然不能使用ubuntu系统apt-get的升级功能对ruby进行升级,但胜在自由度最高,想怎么折腾就怎么折腾.
  2. 到 http://www.ruby-lang.org/zh_CN/downloads/ 下载ruby 1.9.1的源代码.
  3. #解压文件
    tar vfxz ruby-1.9.1-p0.tar.gz
    
    #进入解压后的文件夹
    cd ruby-1.9.1-p0/
    
    #编译源码,在编译之前,应该先对/usr/local/ruby-1.9.1文件夹设置权限.
    ./configure --prefix=/usr/local/ruby-1.9.1
    
    #大名鼎鼎的 make 和 install
    make && make install
    
    #设置PATH路径,把自己安装的ruby放在系统PATH前面,避免调用操作系统自带的ruby
    export PATH=/usr/local/ruby-1.9.1/bin:$PATH
    #我在 ~/.profile 文件中增加了这样的代码:
    if [ -d "/usr/local/ruby-1.9.1/bin" ] ; then
        PATH="/usr/local/ruby-1.9.1/bin:$PATH"
    fi
    然后 注销 再登陆一次.
    
    #如无意外
    
    ruby -v
    #ruby 1.9.1p0 (2009-01-30 revision 21907) [i686-linux]
    
    #ruby 1.9.1安装成功了.
     
  1. 自 己编译安装的好处就是,当下次ruby 1.9.2升级的时候,如果你不想升级,你完成可以无视.如果你想尝鲜,你可以下载ruby 1.9.2,然后重复一下上面的功能,不同的只是把它安装到ruby-1.9.2文件.再把ruby-1.9.2/bin路径设置到PATH前面,完全是 无痛升级,并且可以自由切换;如果你想删除这个版本,只要 rm -Rf ruby-1.9.1,绝不会留下任何疤痕,非常干净,爽就一个字.
  2. 升级到ruby 1.9.1后,不用再另外单独安装 rubygems 了,在ruby 1.9.1下,rubygems已经是默认的ruby包管理程序,查看一下ruby-1.9.1/bin,你会发现gem已经静静地在那里了.

#执行
gem -v
#1.3.1,gem的版本

#再执行
gem list

#你会发现什么都没有,当然啦,这个新的ruby,你还没有安装任何gem包呢.
 



安装Rails

  1. gem install rails -y #从远程安装Rails和所有的依赖.正宗的一键安装,方便快捷.将会安装如下的gem:
Successfully installed activesupport-2.3.2
Successfully installed activerecord-2.3.2
Successfully installed actionpack-2.3.2
Successfully installed actionmailer-2.3.2
Successfully installed activeresource-2.3.2
Successfully installed rails-2.3.2
6 gems installed
Installing ri documentation for activesupport-2.3.2...
Installing ri documentation for activerecord-2.3.2...
Installing ri documentation for actionpack-2.3.2...
Installing ri documentation for actionmailer-2.3.2...
Installing ri documentation for activeresource-2.3.2...
  1. 再次执行 gem list,可以看到如下信息:
*** LOCAL GEMS ***

actionmailer (2.3.2)
actionpack (2.3.2)
activerecord (2.3.2)
activeresource (2.3.2)
activesupport (2.3.2)
rails (2.3.2)
rake (0.8.4)
  1. Rails 2.3.2升级成功了.


下面看看怎么把已有项目升级到当前的Rails版本(2.3.2)

  1. 我是使用Nebeans 6.5进行开发的,顺便把Netbeans 升级到6.5.1版本.
  2. 在Netbeans选中你的项目,右键,选择 Properties ,把 Ruby Platform改为 Ruby 1.9.1 p0就可以了.(如果没有,请增加).
  3. 直接使用 rake rails:update 任务进行升级,结果却令我失望了,加上 --trace 选项可以看到,在新版本下boot.rb文件会报错,错误信息如下:
config/boot.rb:86:in `load_rubygems'
config/boot.rb:52:in `load_initializer'
config/boot.rb:38:in `run'
config/boot.rb:11:in `boot!'
config/boot.rb:109:in `'
Rakefile:4:in `require'
Rakefile:4:in `'
 
  1. 我也不想去查错误,于是新建了一个Rails项目(建一个空目录,进行目录下,然后 rails .),把新项目的 boot.rb 文件拷贝过来,然后执行 rake rails:update 成功了!
  2. 有一个特别的地方,我在一个rb文件的一个正则表达式中使用了全角的逗号,居然不能启动服务器,报如下错误: invalid multibyte char (US-ASCII) (SyntaxError).先把这个去掉,保证能启动再说.
  3. 还 是不能启动,提示:no such file to load -- openssl (RuntimeError) . 其实这个提示误人不少,一般都以为没有安装openssl的ruby gem,如果安装的是系统自带版的ruby的话,要执行的是: sudo apt-get install libopenssl-ruby1.9 
  4. 由于我是自己编译的ruby版本,所以要这样做:
       1. sudo apt-get install openssl libssl-dev
       2. cd ruby_source_dir(就是编译ruby的目录)/ext/openssl
       3. ruby extconfig.rb
       4. make && make install
     
  5. 还是不能升级到ruby 1.9.1,因为我使用中的一个重要的gem:ferret 现在不支持ruby 1.9.1.所以只好继续使用 ruby 1.8.7,但是rails升级到2.3.2.


在ubuntu 下升级 rails.

  1. 由于rails 2.3.2要求rubygem的版本是1.3.1,在我的系统中的gem的版本是1.2.0,必须得升级.由于是使用ubuntu 源安装的gem,因此不能使用 gem update --system
  2. 到 http://rubyforge.org 下载rubygems 1.3.1版本.
  3. 解压下,进行解压目录,执行一下 sudo ruby setup.rb , 再执行一下 gem -v,发现已经升级到了1.3.1版本.
  4. gem update rails 升级就完成了.
  5. gem升级后,gem list为空,要重新安装需要的gem包.


项目升级的一个问题:

  1. 自己对ActiveRecord的一个open class增强(opar.rb文件中)
  2. 未 升级前放在 config/envirment.rb 文件的 Rails::Initializer.run do |config| require File.join(File.dirname(__FILE__),'..', 'lib','extend','opar') #加载我的增强代码  end 块当中,升级后启动出错:
    /usr/lib/ruby/gems/1.8/gems/rails-2.3.2/lib/initializer.rb:416:in `initialize_database': undefined method `configurations=' for ActiveRecord::Base:Class (NoMethodError)  
       from /usr/lib/ruby/gems/1.8/gems/rails-2.3.2/lib/initializer.rb:141:in `process'  
       from /usr/lib/ruby/gems/1.8/gems/rails-2.3.2/lib/initializer.rb:113:in `send'  
       from /usr/lib/ruby/gems/1.8/gems/rails-2.3.2/lib/initializer.rb:113:in `run'  
       from /home/yanghuan/dev/my_project/config/environment.rb:13  
        from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'  
        from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'  
        from /home/yanghuan/.gem/ruby/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:156:in `require'  
        from /home/yanghuan/.gem/ruby/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:521:in `new_constants_in'  
       from /home/yanghuan/.gem/ruby/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:156:in `require'  
       from /usr/lib/ruby/gems/1.8/gems/rails-2.3.2/lib/commands/server.rb:84  
      from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'  
       from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'  
       from script/server:3
 

 

  1. 修改后:在 config/envirment.rb 文件的 Rails::Initializer.run do |config|   end require File.join(File.dirname(__FILE__),'..', 'lib','extend','opar') #加载我的增强代码.
  2. 出现这个错误的原因是:在opar.rb中修改了ActiveRecord::Base类的定义,而在Rails::Initializer.run do |config|  ...  end执行完成之前,Rails还没有加载ActiveRecord,故而出错.
  3. 代码放在block外面了.这下还启动了.
  4. 至此升级顺利完成.

 

你可能感兴趣的:(Ruby,Rails,Linux,Ubuntu,rubygems)