论坛首页 编程语言技术论坛

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

浏览 9405 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-03-22   最后修改:2009-03-22

安装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 `<top (required)>'
Rakefile:4:in `require'
Rakefile:4:in `<top (required)>'
 
  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. 至此升级顺利完成.

 

   发表时间:2009-03-22  
invalid multibyte char 可以通过在文件头添加magic enconding comment解决,
不过如果文件很多的话,都这样处理会非常郁闷,而且感觉也太傻了。
ruby 1.9对于multibyte的编码支持非常诡异,还没有找到一个合适的方法。
0 请登录后投票
   发表时间:2009-03-22   最后修改:2009-03-22
QuakeWang 写道
invalid multibyte char 可以通过在文件头添加magic enconding comment解决,
不过如果文件很多的话,都这样处理会非常郁闷,而且感觉也太傻了。
ruby 1.9对于multibyte的编码支持非常诡异,还没有找到一个合适的方法。

ruby1.9 是 ruby -KU ***.rb 强制用unicode编码ruby文件
所以可以试试 ruby -KU script/server 启动服务器,相应的环境变量 RUBYOPT="-w -KU"。
0 请登录后投票
   发表时间:2009-03-22  
-KU之前试过,rails带的tmail下utils.rb还是会报一个invalid multibyte char,因为这个文件里面有\x00-\x1f\x7f-\xff这样格式的正则表达式,还没有仔细看其他文件会不会有类似问题。
0 请登录后投票
   发表时间:2009-03-22  
QuakeWang 写道
-KU之前试过,rails带的tmail下utils.rb还是会报一个invalid multibyte char,因为这个文件里面有\x00-\x1f\x7f-\xff这样格式的正则表达式,还没有仔细看其他文件会不会有类似问题。

Rails 2.3.1就有这个问题,以为2.3.2把这个问题解决了才号称ruby1.9兼容的呢。
Quake你不怕麻烦 gem install tmail 更新到tmail 1.2.3.1看看有没有解决这个问题。
0 请登录后投票
   发表时间:2009-03-25  
现在困扰我的就是MySQL和Ferret这两个Gem,貌似这两个gem都已经年久失修,不知道是不是已经不会再发布支持1.9.1的版本了。
0 请登录后投票
   发表时间:2009-09-07  
说了半天,这是升级没成功呀。
0 请登录后投票
   发表时间:2009-09-07  
jerry 写道
说了半天,这是升级没成功呀。


呵呵,早就升级到2.3.2了。

2.3.3下面的postgre-pr驱动有bug,不建议使用
0 请登录后投票
   发表时间:2009-09-08  
火星叔叔马丁 写道
下一站,火星 写道
jerry 写道
说了半天,这是升级没成功呀。


呵呵,早就升级到2.3.2了。

2.3.3下面的postgre-pr驱动有bug,不建议使用


你们项目里也开始用postgrel了?


是的,postgre很好用
http://awesomeful.net/posts/45-postgresql-rails-and-why-you-should-care
0 请登录后投票
   发表时间:2009-09-08   最后修改:2009-09-08
下一站,火星 写道
jerry 写道
说了半天,这是升级没成功呀。


呵呵,早就升级到2.3.2了。

2.3.3下面的postgre-pr驱动有bug,不建议使用




我是说你的Ruby 1.9.1升级不成功


昨天我在windows下升级ruby1.9.1, Rails 2.3.4发现问题一堆,解决了中文问题后,当打开网页时,直接报ruby的解释器崩溃了。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics