星期三, 5月 02, 2012

Issue on Rails 2.x project upgrade to Rails 3.x project


    首先,為了避免要升級的rails版本跟原本系統中的版本有衝突,我們要先安裝 rvm(Rails Virtual Machine)。 (先變成bash, rvm 目前只支援 bash) 參考Xdite的 步驟
    http://blog.xdite.net/mac-lion-xcode-ruby-rails-192/

    1. 按照裡面安裝 RVM 與 Ruby 1.9.2

    $ bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
    檢查 ~/.bashrc 或者 ~/.bash_profile 有沒有 PATH= $PATH:$HOME/.rvm/bin 存在
    接著設定安裝目標的rails版本
    $rvm install 1.9.2

    接著安裝必要的rubyGems
    $ gem install rails -v=3.2.2
    $ gem install mysql2
    $ gem install passenger
    $ gem install nokogiri
    $ gem install capistrano
    $ gem install capistrano-ext
    $ gem install delayed_job
    $ gem install hoptoad_notifier
    $ gem install facebooker2
    $ gem install factory_girl


    以上是先設定環境的部份

    2. 修正原本的rails project
    先修改讓原始的rake可以 run
    新增 require ‘thread’ 在 Rakefile, script/server 以及 script/generate

    2.1 接著下載已經寫好的upgrade套件
    https://github.com/rails/rails_upgrade
    如果有git的話就用$ git clone https://github.com/rails/rails_upgrade.git
    如果沒有的話可以下載zip檔案,總之先確認自己已經在rails project的root了(裡面有 app/, config/, db/, …, etc.)
    接著著按照https://github.com/rails/rails_upgrade 的指示
    2.2
    $ rake rails:upgrade:check
    會出現很多Warnings
    把這些warning儘量修掉,因為這些意味著在rails2的語法可以動,但是Rails3的時候大部分已經被停用了。最常出現的bug不外乎語法上的代換,還有vendor/plugin裡面的套件需要替換成gem 或者有些在新版的時候已經放進去lib裡面了。
    2.3 下一個指令,把你原本的會造成衝突的檔案備份
    $ rake rails:upgrade:backup
    這些檔案會被加上*.rails2的附檔名儲存起來。

    2.4 接著修正config/routes.rb的檔案。
    $ rake rails:upgrade:routes
    這個指令會產生轉譯過的你原本的的config/routes檔案,確認可以使用之後。修正為新的要用的config/routes.rb
    $ rake rails:upgrade:routes > routes.rb
    $ mv routes.rb config/
    2.4 產生新的application.rb
    rake rails:upgrade:configuration
    這個指令會依照你原本的environment.rb產生新的application.rb檔案。
    原始的environment.rb會拆成新的environment.rb 以及application.rb檔案。
    同樣確認後覆蓋過去。
    $ rake rails:upgrade:configuration > application.rb
    $ mv application.rb config/
    以上是使用別人寫好的套件修正我們的project
    3. 在原始的project產生新的rails 3 project
    以下的動作是不可逆的,請確認你已經有把原本的project備份了
    $ cp -rf  ../railsapp ../railsapp_backup
    首先確認目前的rails版本已經是 3.2.x 而且是rvm產生的
    $ rails -v
    接著產生新的rails project
    $ rails new ./
    會有很多檔案需要覆蓋或者保留,可以使用’d’去看是否需要被修正,這邊就要不斷的try and error,有些被覆蓋過去之後router就會壞掉。注意 config/routes.rb config/application.rb 還有config/environment.rb不可以被覆蓋。

    把舊的vendor/plugin轉換成新的 gems 在 Gemfile裡面

    修正Funshionchart on rails3
    http://forum.fusioncharts.com/topic/8111-fusioncharts-rails-3-sample-application/
    基本上只是把需要的這個rails_project裡面的lib檔案丟到我們自已的rails_project裡面的lib即可代換掉,注意一下function引入的參數量會稍稍不同。不過原則上是大同小異。

    接者就是把一些會error的語法修正即可,可以藉由這個機會趁機多熟悉rails3的語法。
    基本上大架構不會改變太多,只是把MVC的結構更完善的體現囉。

沒有留言: