Ruby on Rails 从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 –不,请勿覆盖

  • 一个–全部,覆盖此和所有其他

  • q –退出,中止

  • d – diff,显示新旧之间的差异

  • h –帮助

通常,您应该检查新旧文件之间的差异,以确保没有不必要的更改。

Rails 5.0ActiveRecord模型继承自ApplicationRecord,而不是ActiveRecord::Base。ApplicationRecord是所有模型的超类,类似于ApplicationController控制器的超类。为了说明这种新的模型处理方式,您必须在app/models/名为的文件夹中创建一个文件application_record.rb,然后将该文件的内容编辑为:

class ApplicationRecord < ActiveRecord::Base

 self.abstract_class= true

end

Rails 5.0处理的回调也略有不同。返回false的回调不会停止回调链,这意味着后续的回调仍将运行,这与Rails 4.2不同。升级时,尽管可以通过添加以下内容切换到Rails 5.0行为,但Rails 4.2行为将保留。

ActiveSupport.halt_callback_chains_on_return_false = false

到config/application.rb文件。您可以通过调用明确终止回调链throw(:abort)。

在Rails 5.0中,ActiveJob将继承自ApplicationJob,而不是ActiveJob::Base在Rails 4.2中继承。要升级到Rails 5.0,请application_job.rb在app/jobs/文件夹中创建一个名为的文件。将该文件的内容编辑为:

class ApplicationJob < ActiveJob::Base

end

然后,您必须将所有作业更改为从而ApplicationJob不是从继承ActiveJob::Base。

Rails 5.0的另一个最大变化之一是不需要任何代码更改,但会更改您在Rails应用程序中使用命令行的方式。您将能够使用bin/rails或仅rails运行任务和测试。例如,$rake db:migrate现在可以使用代替使用$rails db:migrate。如果运行$bin/rails,则可以查看所有可用命令。请注意,现在可以使用运行的许多任务bin/rails仍然可以使用rake。

以上是 Ruby on Rails 从Rails 4.2升级到Rails 5.0 的全部内容, 来源链接: utcz.com/z/326289.html

回到顶部