2016-07-18 149 views

回答

42

我只是通過這個去了,前幾天,這是我的(成功的)過程:

首先,確保你的應用程序在升級之前關於Ruby 2.2+上運行。

然後更新Rails到最新的4.x版本(現在4.2.7),並運行你的測試套件(或者充分鍛鍊你的應用程序)觀察日誌中的棄用警告。

如果您發現任何問題,請修復這些棄用行爲。

仔細閱讀5.0 release notes並記下可能會影響您的應用的事物。

請檢查您的GemfileReady4Rails,這應該有助於告訴您哪些寶石可能尚未準備好用於Rails 5。

您可能需要訪問家庭存儲庫中的某些寶石,看看是否有可能支持的分支,但尚未完全發佈。您可能希望將Gemfile的這些寶石固定爲預發佈版本或分支(即使您不立即採用,這可以幫助您在發佈這些寶石的最終版本時運行)。

它也可能有助於減少您的依賴關係。例如,您的development區塊中可能有一堆寶石尚未更新。你可能沒有這些生活一段時間。

有些人會建議您刪除Gemfilebundle update中的版本號。我會建議反對。一次更改太多東西可能會很難追查問題。

改變你Gemfile這樣列出的版本的Rails:

gem 'rails', '= 5.0.0' 

和運行bundle update rails

這可能會失敗,並提供捆綁器無法解析的版本號比較列表。尋找最終需要rails小於5的任何依賴關係,並查看是否可以更新這些依賴關係。

更改您的gem版本,撤消對rails版本的更改。 bundle update該寶石,再次運行你的套件(或鍛鍊你的應用程序的一部分,使用該寶石的功能),並尋找折舊。

提交您的小型進行中的步驟,並根據需要重複,直到您終於可以將Rails鎖定爲5.0.0

一旦你得到那些阻止依賴關係解決,並且bundle update rails成功完成,提交併再次運行你的測試套件。

如果你的套房和我的一樣,那麼在這裏就會有一面被棄用的牆,但通常每個測試都會重複幾次。現在不一定要解決這些問題,但我會解決嘈雜的問題......他們可能會讓更難以看到更重要的問題。我必須將大量的控制器規格從post :foo, name: 'bar'更改爲post :foo, params: { name: 'bar' },以使指定的參數語法棄用警告消失。

您可能還需要更新一些代碼來修復一些失敗的規格。幸運的是,我沒有必要,但是如果你更新了Rails或者其中一個寶石,你應該能夠追溯到Rails的變化。

現在,您應該運行bin/rails rails:update來更新您的配置文件。仔細區分每個這些以查找更改。我更喜歡從diff輸出中複製/粘貼線條,並將它們手動複製到我的配置中,並在必要時進行調整並保持差異,直到我看到的所有內容都是我在diff中的自定義設置。

完成這些工作後,再次運行您的規格,並實際打開應用程序並確保其按預期工作。將它推送到臨時環境以確保它在類似生產環境中的行爲也許是有用的。

希望你現在已經完成了,但還有一些額外的細節可以帶來。我切換到一個新的目錄並生成一個全新的Rails應用程序rails new rails5project並複製新應用程序中的文件,這些文件可能不包含在您的應用程序中,例如app/models/application_record.rbapp/mailers/application_mailer.rb(以及從它們繼承的轉換模型,而不是ActiveRecord::BaseActionMailer::Base)。

此外,app/assets/javascripts/cable.jsapp/assets/javascripts/channelsapp/channels,如果你想使用ActionCable,並app/jobs如果你想使用ActiveJob`

然後看新鮮的Rails 5應用程序的Gemfile,並帶來超過列出的所有寶石如果你想要他們。例如,Rails5現在默認配備Turbolink 5,Puma,listenspring-watcher-listen

希望畢竟這個工作應用程序仍然能夠滿足您在Rails 5上運行的所有需求。但是,如果您因爲gem依賴性而被阻止,希望您可以保留此分支,直到一切準備就緒併合並它!

+0

非常感謝。這工作 – Raidspec

+0

@Raidspec這是驚人的。看起來你升級的時間比我寫出來的要少! – Unixmonkey

+0

我有一個和你的完全一樣的指南。 https://hashrocket.com/blog/posts/how-to-upgrade-to-rails-5 – Raidspec

5

只要遵循這一點,並確保您具有最低的Ruby要求

http://guides.rubyonrails.org/upgrading_ruby_on_rails.html

基本辦法做到這一點(不完全是安全的,但將它升級):

指定您的Gemfile

gem 'rails', '5.0.0' 

,然後在你的終端

bundle update rails 
+0

真的很簡單,consi ce回答 –

1

即使我想升級我的軌道版本軌5

這是一個清單,以遵循here

  1. 變化ruby版本2.2。2

  2. 創建app/models/application_record.rb並添加:

    # app/models/application_record.rb 
    class ApplicationRecord < ActiveRecord::Base 
        self.abstract_class = true 
    end 
    

    ,並確保所有的車型繼承它。在Gemfile

    gem 'rails', '5.0.0' 
    
  3. # app/jobs/application_job.rb 
    class ApplicationJob < ActiveJob::Base 
    end 
    
  4. 變化rails版本byebug替換debugger

    # app/models/user.rb 
    class User < ApplicationRecord 
    end 
    
  5. app/jobs/創建application_job.rb和補充。

    調試器不被紅寶石2.2這是由Rails的要求5.

    gem 'byebug' 
    
  6. 捆綁

    bundle install 
    

    bundle install將拋出錯誤或警告的寶石寶石的一些改變自己的版本支持需要的版本通過rails 5