gpt4 book ai didi

ruby-on-rails - 如何从Rails 4.2.6升级到Rails 5.0

转载 作者:行者123 更新时间:2023-12-03 10:07:49 24 4
gpt4 key购买 nike

是否可以通过控制台将Rails升级到新的5.0版本?

还是我必须手动去替换升级所需的每个文件?实习生给我解决这个问题的方法似乎很模糊。

最佳答案

我几天前才经历过,这是我的(成功的)过程:

首先,请确保您的应用在Ruby 2.2+上运行,然后再进行升级。

然后将Rails更新到最新的4.x版本(现在是4.2.7),然后运行测试套件(或充分锻炼您的应用程序),观察日志中是否存在弃用警告。

如果发现这些折旧,请修复这些折旧。

仔细阅读5.0 release notes并记下可能影响您应用程序的内容。

使用Ready4Rails检查您的Gemfile,这应该有助于告诉您您拥有的 gem 可能尚未为Rails 5准备好。 [注意:从1/13/2020起,Ready4Rails.net似乎已被删除]

您可能需要访问主页存储库中的一些gem,以查看是否有一个分支可能受到支持,但尚未发布。您可能希望将这些gem的Gemfile固定到预发行版本或fork(即使您不立即采用,也可以帮助您在发布这些gem的最终版本时使事情正常运行)。

通常,这也可能有助于减少依赖性。例如,您的development块中可能有一堆尚未更新的 gem 。您可能会暂时没有这些生活。

有人会建议您删除Gemfilebundle update中的版本号。除了极小的应用程序之外,我建议不要这样做。一次更改太多的事情可能会很难找到问题。

像这样更改在Gemfile中列出的Rails的版本:

gem 'rails', '= 5.0.0'

并运行 bundle update rails

这可能会失败,并为您提供 bundle 程序无法解析的版本号比较列表。查找最终要求rails小于5的所有依赖项,并查看是否可以更新。

更改该gem的版本,撤消对rails版本的更改。用 bundle update这个gem,再次运行您的套件(或练习使用该gem功能的应用程序部分)并查找不推荐使用的东西。

提交您正在进行的小步骤,并根据需要重复,直到最终将Rails固定到 5.0.0为止。

一旦解决了这些阻塞依赖性,并且 bundle update rails成功完成,请提交并再次运行测试套件。

如果您的套件像我的套件一样,这里会有很多弃用的东西,但是每次测试通常只重复几件事。严格来说,现在不必立即解决这些问题,但是我会解决那些嘈杂的问题……它们可能会使看到更重要的问题变得更加困难。我不得不将大量的 Controller 规格从 post :foo, name: 'bar'更改为 post :foo, params: { name: 'bar' },以使命名参数语法弃用警告静音。

您可能还需要更新一些代码来修复此处的某些失败规范。幸运的是,我不必这样做,但是您应该能够追溯到Rails或其中任何一个gem(如果您更新了)的变化的根本原因。

现在,您应该运行 bin/rails rails:update来更新您的配置文件。仔细比较每一个以寻找更改。我更喜欢从diff输出中复制/粘贴行,并手动将它们复制到我的配置中,并在必要时进行调整,并保持差异,直到我看到的都是差异中的自定义设置。

完成所有步骤后,再次运行您的规格,然后实际打开该应用程序并确保其可以正常运行。将其推送到暂存环境以确保它也可以在类似于生产的环境中运行可能会很有用。

查看 bin/rails rails:update( config/initializers/new_framework_defaults.rb)创建的文件,看看是否可以禁用或注释掉这些文件而不影响应用程序的行为。

这些行为以及其他更改通常记录在 Upgrading Ruby on Rails Guide

希望您现在完成了,但是可以带来一些额外的好处。我切换到一个新目录并使用 rails new rails5project生成一个全新的Rails应用程序,并复制您的应用程序中可能没有的新文件(例如 app/models/application_record.rbapp/mailers/application_mailer.rb)(以及过渡模型以从中继承而不是 ActiveRecord::BaseActionMailer::Base)。

另外,如果要使用ActionCable,请输入 app/assets/javascripts/cable.jsapp/assets/javascripts/channelsapp/channels;如果要使用ActiveJob,请输入 app/jobs

然后查看新的Rails 5应用程序的 Gemfile,并带上那里列出的所有 gem 。例如,Rails5现在随附了Turbolinks 5,默认情况下的Puma, listenspring-watcher-listen

希望所有这些工作完成之后,您的应用程序仍能满足您在Rails 5上运行的所有需求。但是,如果由于gem依赖关系而被阻塞,希望您可以保留该分支,直到一切就绪并合并为止!

关于ruby-on-rails - 如何从Rails 4.2.6升级到Rails 5.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38442248/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com