Rails5 升级 Rails6 记录

从 Rails 5.2.3 升级到 Rails6 遇到的一些问题。

基本步骤

本地 rails 5.2.3,在项目根目录下,终端执行命令:

bundle outdated

对于列出的 outdated 的gem,除了rails自带的那些,一个个过 changelog,衡量后升级即可。

gems 升级完成后,升级项目至 rails6。

新建一个rails 6 的demo:

cd ~/Workspace
gem install rails -v 6.0.2.1

# Skip Sprockets files, Skip test files, Preconfigure postgresql as default database
rails new -d postgresql -T -S demo

使用文件对比软件【推荐araxis merge ,真的很好用。】,对比两个项目的不同处,斟酌处理。

遇到的问题

  • gem hashie 版本升级至 4.0.0,导致 omniauth 当前1.9.0 版本不能使用,依赖 hashie 4.0 以下版本。

    问题:

    如上所述。

    解决:

    查看commits,问题在2019-11-17已解决,但新版本尚未发布。


    取2019-11-17 的最后一个commit,Gemfile 更新:

    gem "omniauth", github: 'omniauth/omniauth', ref: 'ccee08f'
    
  • 使用了年久失修的gem capybara-user_agent,升级capybara至3.30.0后, 现有版本0.0.3的capybara-user_agent无法使用。

    capybara-user_agent 要求 2.0.2 <= capybara < 3

    解决:

    老大教的一个小技巧。

    去 insights 中 找 Network,看别人fork后的库,然后引用即可。

    这里是aha-app/capybara-user_agent.

    更新 Gemfile.

    gem "capybara-user_agent", github: "aha-app/capybara-user_agent", branch: 'capybara-3'
    
  • 多个rails共存时,如何卸载指定版本的rails?

    问题:

    本地安装了rails6.0.2.1, rails 5.2.3,使用gem uninstall rails -v 6.0.2.1 后,终端rails -v 显示 rails 6.0.2.1。

    解决:

    gem list | grep railties
    
    gem uninstall railties -v 6.0.2.1
    
    rails -v
    
    Rails 5.2.3
    

参考

uninstall rails completely