如何从rails 4.2.6升级到rails 5.0
是否有控制台方式我可以将我的rails升级到新的5.0版本?
或者我是否必须手动更换升级所需的每个文件? Interne在给我这个问题的解决方案时似乎含糊不清。
几天前我刚刚完成了这个过程,这是我的(成功)过程:
首先,确保您的应用程序在升级之前在Ruby 2.2+上运行。
然后将Rails更新到最新的4.x版本(现在为4.2.7),并运行您的测试套件(或完全锻炼您的应用程序),查看日志中的弃用警告。
如果您发现任何弃用,请修复这些弃用。
仔细阅读5.0发行说明并记下可能会影响您的应用的内容。
使用Ready4Rails检查您的Gemfile
,这应该有助于告诉您尚未为Rails 5做好准备的gem。
你可能需要访问一些gem的主存储库,看看是否有一个可能有支持的分支,但还没有完全发布。 您可能希望将这些gem的Gemfile固定为预发布版本或分支(即使您没有立即采用,这可以帮助您在发布这些gem的最终版本时运行)。
它也可能有助于减少您的依赖性。 例如,您的development
块中可能有一堆gem尚未更新。 你可能会在没有这些的情况下生活一段时间。
有些人会建议您删除Gemfile
中的版本号并bundle update
。 我建议反对。 一次改变太多东西会使追踪问题变得非常困难。
更改Gemfile
列出的Rails版本,如下所示:
gem 'rails', '= 5.0.0'
并运行bundle update rails
。
这可能会失败,并为您提供捆绑程序无法解析的版本号比较列表。 查找最终要求rails小于5的任何依赖项,并查看是否可以更新这些依赖项。
更改该gem的版本,撤消对rails版本的更改。 bundle update
该gem,再次运行您的套件(或运用您的应用程序使用该gem的function)并查找弃用。
提交您正在进行中的小步骤并根据需要重复,直到最终可以将Rails固定为5.0.0
。
一旦解决了这些阻塞依赖关系,并且bundle update rails
成功完成,请提交并再次运行测试套件。
如果您的套房与我的套房类似,那么这里会有一道废弃墙,但通常每次测试都会重复一些事情。 现在并不是必须要解决这些问题,但我会解决那些吵闹的问题……他们可能会让人更难看到更重要的问题。 我不得不改变post :foo, name: 'bar'
的大量控制器规格post :foo, name: 'bar'
post :foo, params: { name: 'bar' }
以使命名参数语法弃用警告静音。
您可能还需要更新一些代码来修复一些失败的规范。 幸运的是,我没有必要,但如果您更新任何内容,您应该能够追溯Rails或其中一个gem的根本原因。
现在,您应该运行bin/rails rails:update
,以更新配置文件。 仔细区分每一个以寻找变化。 我更喜欢从diff输出中复制/粘贴行并将它们手动复制到我的配置中并在必要时进行调整并保持差异,直到我看到的全部是diff中的自定义设置。
完成所有操作后,再次运行您的规范,并实际打开应用程序并确保它按预期工作。 将其推送到临时环境以确保其在类似生产的设置中的行为可能很有用。
希望你现在已经完成了,但是你可以带来一些额外的细节。 我切换到一个新目录,并使用rails new rails5project
生成一个全新的Rails应用程序,并复制你应用程序中可能没有的新文件,如app/models/application_record.rb
和app/mailers/application_mailer.rb
(和过渡模型从它们inheritance而不是ActiveRecord::Base
和ActionMailer::Base
)。
此外, app/assets/javascripts/cable.js
, app/assets/javascripts/channels
和app/channels
,如果你想使用ActionCable, app/jobs
如果你想使用ActiveJob`
然后查看新的Rails 5应用程序的Gemfile
,如果需要,可以带来那里列出的任何gem。 例如,Rails5现在附带Turbolinks 5,Puma默认情况下, listen
和spring-watcher-listen
。
希望在所有这些之后,你有一个仍然满足你在Rails 5上运行的所有需求的工作应用程序。但是,如果你因为gem依赖而被阻止,希望你可以保持这个分支,直到一切准备好并合并它!
只需遵循这一点,并确保您具有最低的Ruby要求
http://guides.rubyonrails.org/upgrading_ruby_on_rails.html
这样做的基本方法(不完全安全但会升级):
在gemfile中指定
gem 'rails', '5.0.0'
然后在你的终端
bundle update rails
即使我正在尝试将我的rails版本升级到rails 5
这是一份清单,可以从这里开始
-
将
ruby
版本更改为2.2.2 -
在
app/models/
创建application_record.rb
并添加:# app/models/application_record.rb class ApplicationRecord < ActiveRecord::Base self.abstract_class = true end
并确保所有模型都inheritance自它。
# app/models/user.rb class User < ApplicationRecord end
-
在
app/jobs/
创建application_job.rb
并添加:# app/jobs/application_job.rb class ApplicationJob < ActiveJob::Base end
-
在
Gemfile
更改rails
版本gem 'rails', '5.0.0'
-
用
byebug
替换debugger
。Rails 5不需要Ruby 2.2支持调试器。
gem 'byebug'
-
捆绑gem
bundle install
bundle install
会抛出错误或警告某些gem将其版本更改为rails 5
所需的版本