如何从rails 4.2.6升级到rails 5.0

Rai*_*pec 25 ruby-on-rails

是否有控制台方式我可以将我的rails升级到新的5.0版本?

或者我是否必须手动更换升级所需的每个文件?Interne在给我这个问题的解决方案时似乎含糊不清.

Uni*_*key 58

几天前我刚刚完成了这个过程,这是我的(成功)过程:

首先,确保您的应用程序在升级之前在Ruby 2.2+上运行.

然后将Rails更新到最新的4.x版本(现在为4.2.7),并运行您的测试套件(或完全锻炼您的应用程序),查看日志中的弃用警告.

如果您发现任何弃用,请修复这些弃用.

仔细阅读5.0发行说明并记下可能会影响您的应用的内容.

检查你GemfileReady4Rails,这应该有助于告诉你你有什么宝石可能还没有为Rails 5做好准备.

您可能需要访问一些宝石的主存储库,以查看是否有可能有支持的分支,但尚未完全发布.您可能希望将这些宝石的Gemfile固定为预发布版本或分支(即使您没有立即采用,这可以帮助您在发布这些宝石的最终版本时运行).

它也可能有助于减少您的依赖性.例如,您的块中可能有一堆宝石,development尚未更新.你可能会在没有这些的情况下生活一段时间.

有些人会建议你删除你Gemfile和中的版本号bundle update.我建议反对.一次改变太多东西会使追踪问题变得非常困难.

更改您Gemfile喜欢的Rails版本:

gem 'rails', '= 5.0.0'
Run Code Online (Sandbox Code Playgroud)

并运行bundle update rails.

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

更改该gem的版本,撤消对rails版本的更改.bundle update那个宝石,再次运行你的套件(或运用你的应用程序中使用该宝石功能的部分)并寻找弃用.

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

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

如果您的套房与我的套房类似,那么这里会有一道折旧的墙,但通常只是为每次测试重复一些事情.现在并不是必须要解决这些问题,但是我会解决那些吵闹的问题......他们可能会让人更难看到更重要的问题.我不得不改变大量的控制器规格,post :foo, name: 'bar'post :foo, params: { name: 'bar' }使命名参数语法弃用警告静音.

您可能还需要更新一些代码来修复一些失败的规范.幸运的是,我没有必要,但你应该能够追溯根本原因,如果你更新任何东西,可以回到Rails或你的一个宝石的变化.

现在,您应该运行bin/rails rails:update,以更新配置文件.仔细区分每一个以寻找变化.我更喜欢从diff输出中复制/粘贴线条并手动将它们复制到我的配置中并根据需要进行调整并保持差异,直到我看到的全部是diff中的自定义设置.

完成所有操作后,再次运行您的规范,并实际打开应用程序并确保它按预期工作.将其推送到临时环境以确保其在类似生产的设置中的行为可能很有用.

希望你现在已经完成了,但是你可以带来一些额外的细节.我切换到一个新的目录,并产生了一个全新的Rails应用程序bin/rails rails:update,并复制了,你可能在你的应用程序就像没有新的文件config/initializers/new_framework_defaults.rbrails new rails5project(与过渡模式从他们那里,而不是继承app/models/application_record.rbapp/mailers/application_mailer.rb).

此外,ActiveRecord::Base,ActionMailer::Base,和app/assets/javascripts/cable.js,如果你想使用ActionCable,并且app/assets/javascripts/channels如果你想使用ActiveJob`

然后看看新鲜的Rails 5应用程序app/channels,如果你需要,可以带来那里列出的任何宝石.例如,Rails5现在默认配备Turbolinks 5,Puma,app/jobs以及Gemfile.

希望在所有这些之后你有一个仍然满足你在Rails 5上运行的所有需求的工作应用程序.但是,如果你因为gem依赖而被阻止,希望你可以保持这个分支,直到一切准备好并合并它!


Dee*_*ale 8

即使我正在尝试将我的 rails 版本升级到 rails 5

这是从这里遵循的清单

  1. ruby版本更改为2.2.2

  2. 创建application_record.rbapp/models/并添加:

    # app/models/application_record.rb
    class ApplicationRecord < ActiveRecord::Base
      self.abstract_class = true
    end
    
    Run Code Online (Sandbox Code Playgroud)

    并确保您的所有模型都继承自它。

    # app/models/user.rb
    class User < ApplicationRecord
    end
    
    Run Code Online (Sandbox Code Playgroud)
  3. 创建application_job.rbapp/jobs/并添加:

    # app/jobs/application_job.rb
    class ApplicationJob < ActiveJob::Base
    end
    
    Run Code Online (Sandbox Code Playgroud)
  4. 更改rails版本Gemfile

    gem 'rails', '5.0.0'
    
    Run Code Online (Sandbox Code Playgroud)
  5. 替换debuggerbyebug

    Rails 5 要求的 Ruby 2.2 不支持调试器。

    gem 'byebug'
    
    Run Code Online (Sandbox Code Playgroud)
  6. 捆绑宝石

    bundle install
    
    Run Code Online (Sandbox Code Playgroud)

    bundle install 会为某些 gem 抛出错误或警告,将它们的版本更改为所需的版本 rails 5


Ric*_*san 7

只需遵循这一点,并确保您具有最低的Ruby要求

http://guides.rubyonrails.org/upgrading_ruby_on_rails.html

基本的方法(不完全安全但会升级):

在gemfile中指定

gem 'rails', '5.0.0'
Run Code Online (Sandbox Code Playgroud)

然后在你的终端

bundle update rails
Run Code Online (Sandbox Code Playgroud)