從 Rails 4.2 升級到 Rails 5.0
注意:在升級 Rails 應用程式之前,請務必將程式碼儲存在版本控制系統上,例如 Git。
要從 Rails 4.2 升級到 Rails 5.0,你必須使用 Ruby 2.2.2 或更高版本。根據需要升級 Ruby 版本後,轉到 Gemfile 並更改行:
gem 'rails', '4.2.X'
至:
gem 'rails', '~> 5.0.0'
並在命令列上執行:
$ bundle update
現在使用以下命令執行更新任務:
$ rake rails:update
這將幫助你更新配置檔案。系統將提示你覆蓋檔案,並且你有幾個輸入選項:
- 是的 - 是的,覆蓋
- n - 不,不要覆蓋
- a - 全部,覆蓋這個和所有其他人
- q - 退出,中止
- d - diff,顯示舊舊之間的差異
- h - 幫助
通常,你應該檢查舊檔案和新檔案之間的差異,以確保你沒有收到任何不必要的更改。
Rails 5.0 ActiveRecord
模型繼承自 ApplicationRecord
,而不是 ActiveRecord::Base
。ApplicationRecord
是所有模型的超類,類似於 ApplicationController
是控制器的超類。要考慮處理模型的這種新方法,你必須在名為 application_record.rb
的 app/models/
資料夾中建立一個檔案,然後將該檔案的內容編輯為:
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
end
Rails 5.0 還處理稍有不同的回撥。返回 false
的回撥不會停止回撥鏈,這意味著後續的回撥仍然會執行,這與 Rails 4.2 不同。升級時,Rails 4.2 行為將保留,但你可以通過新增以下內容切換到 Rails 5.0 行為:
ActiveSupport.halt_callback_chains_on_return_false = false
到 config/application.rb
檔案。你可以通過呼叫 throw(:abort)
顯式停止回撥鏈。
在 Rails 5.0 中,ActiveJob
將繼承 ApplicationJob
,而不是像 Rails 4.2 中的 ActiveJob::Base
。要升級到 Rails 5.0,請在 app/jobs/
資料夾中建立名為 application_job.rb
的檔案。將該檔案的內容編輯為:
class ApplicationJob < ActiveJob::Base
end
然後,你必須將所有作業更改為從 ApplicationJob
而不是 ActiveJob::Base
繼承。
Rails 5.0 的其他最大變化之一不需要任何程式碼更改,但會改變你使用 Rails 應用程式的命令列的方式。你將能夠使用 bin/rails
,或僅使用 rails
來執行任務和測試。例如,你現在可以使用 $ rake db:migrate
而不是使用 $ rake db:migrate
。如果執行 $ bin/rails
,則可以檢視所有可用命令。請注意,現在可以使用 bin/rails
執行的許多工仍然可以使用 rake
。