从 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
。