---主题:升级项目到 3.0.0.beta3 






注意:rails需要至少ruby 1.8.7,如果ruby版本不够1.8.7,请升级为1.8.7或1.9.2。 




1: 升级rubygems为1.3.7 




sudo gem update --system 




2:安装rails 3.0依赖的包 




1》 


sudo gem install tzinfo builder i18n memcache-client rack rake rack-test erubis mail text-format thor bundler 




2》 


sudo gem install rack-mount 




3:安装rails 3.0 


gem install rails --pre -v=3.0.0.beta3 




4:升级项目 




1》 安装官方的升级插件(如果没有安装git,先安装git) 


1》》 进入项目下,script/plugin install git://github.com/rails/rails_upgrade.git 




2》》 新建rails3的项目app(rails app) 




3》》 进入ihaveu项目下 




1)进入ihaveu项目下,rake rails:upgrade:backup 


这个rake会备份一些要修改的文件,备份文件以rails2结尾. 




2)复制app项目config/application.rb文件到项目的config下 


 执行rake rails:upgrade:configuration 


 将从module开始及其以后的内容都复制到application.rb中覆盖module 的内容,注意如果你在这里有config.gem 的配置,在新的config/application.rb文件中要删除掉,会报错的 




3)复制app项目根目录下的Gemfile文件到ihaveu项目。 


 执行rake rails:upgrade:gems 


 生成的内容复制到Gemfile下 




4)进入ihaveu项目下,执行rake rails:upgrade:routes 


 生成的内容复制到routes.rb中 




5)复制app项目下的config.ru文件到ihaveu项目下 


 修改config.ru文件中的run **::Application的**(**是项目名称)改为现在的项目名称(Ihave,首字母大写) 




6)复制app项目config下environment.rb文件到ihaveu项目下 


 修改environment.rb文件中的run **::Application.initialize!(**是项目名称)改为现在的项目名称(Ihave,首字母大写) 




7) 删掉ihaveu项目的config/initializers下的new_rails_defaults.rb文件 




8) 复制app项目config下的boot.rb文件到ihaveu项目下对应的位置 




9) 复制app项目下的script目录中的rails文件复制到ihaveu项目下的script目录中 




10) 修改ihaveu项目中config/environments目录下的三个文件(development.rb、test.rb、production.rb),这三个文件要这样修改 




 Ihaveu(项目名称)::Application.configure do 


 # 原来的代码 


 end 




11) rails server 启动服务器 




如果没有用插件(或者使用的插件已经支持Rails 3.0 beta了),估计就可以初步地启动服务器了,此时启动项目时,会提示问题,如果使用了gem包,很有可能会出现问题,此时需要依照各自的问题来解决。现在我查找ihaveu项目中的不用的或不支持rails 3的gem包。 






12) 注释不兼容Rails 3.0 beta的gem包 




进入ihaveu项目中,打开根目录Gemfile文件,注释掉以下gem: 




# gem 'rails', '2.3.4' 


# gem 'thoughtbot-paperclip', '~> 2.3.0', :require => 'paperclip' 


# gem 'rspec-rails', :require => 'spec/rails' 


# gem 'thinking-sphinx', :require => 'thinking_sphinx' 


source 'http://gemcutter.org' 


# gem 'ts-datetime-delta', '>= 1.0.0', :require => 'thinking_sphinx/deltas/datetime_delta' 






 以下是可以替换的包: 


 gem install rspec --prerelease 


 gem install rspec-rails --pre 


 gem install thinking-sphinx --pre 








注意:其实nkallen-cache-money包也是不兼容Rails 3.0 beta,但是这个可以修改,修改后就可以用了,修改方法如下: 




找到已安装好的nkallen-cache-money包 


1》打开/lib/下的cache_money.rb,将require 'activesupport'、require 'activerecord'修改为require 'active_support'、require 'active_record'(因为rails3 中只有require 'active_support'、require 'active_record'没有require 'activesupport'、require 'activerecord') 




2》打开/lib/cash下的mock.rb,将< HashWithIndifferentAccess删掉 






13)修改内容 




1》 


把ihaveu项目中config下的environment.rb.rails2中 


module Kernel 


 def is_sphinx_enabled? 


 false#RUBY_PLATFORM !~ /mingw|mswin|java/ && File.exist?(%x(which mmseg)[0..-2]) # && RAILS_ENV == "production" 


 end 


end 


复制到ihaveu项目中config/application.rb中的module 项目名称 上边。 






2》 


ihaveu项目/config/initializers/error_table.rb中注释以下行: 


4、17、62、63、66、69、70、72、79、80、81、83、84、86、87、88、145、146、147、148、149、150、151、152、169、176 






3》 


ihaveu项目/config/initializers/new_rails_defaults.rb中注释第14行 






4》 


ihaveu项目/config/initializers/session_store.rb中注释第16、22行 






5》 


1》》ihaveu项目/config/routes.rb中修改以下内容: 




match '/signup/:invitation_id/:invitation_code' => 'home/accounts#new', :as => :signup, :invitation_id => , :invitation_code => 


改为 


match '/signup/:invitation_id/:invitation_code' => 'home/accounts#new', :as => :signup, :invitation_id => "", :invitation_code => "" 




2》》 


把所有的get_post :***,改为get :***和 post :***。 




3》》 


修改路由代码,为resources指定:controller选项 


例如: 


resources :friends do 


 ...... 


end 


改为 


resources :friends, :controller => 'home/friends' do 


 ...... 


end 




14)升级项目完成,启动项目rails server 










---主题:升级项目到2.3.8 




1:安装rails 2.3.8(如果想删掉旧版本的gem,sudo gem cleanup) 


sudo gem install rails -v=2.3.8 




2:更改config/environment.rb代码中的RAILS_GEM_VERSION为2.3.8 




3:启动项目运行。 




4:没有不兼容的插件。