Ruby on Rails应用升级还是重构?(Rails 5.0至7.1)
Rails多版本升级方案咨询及实践反馈
问题背景
我有一个大型Web应用(包含用户管理、订单系统的电商平台,以及通过API控制器与ROR应用通信的ThreeJS应用),当前版本为Rails 5.0.0.beta2、Ruby 2.3.1p112和PostgreSQL 10.19。因应用处于生产环境,需迁移至FreeBSD 13服务器,但该服务器因OpenSSL版本过低不支持旧版Ruby,故必须将应用升级至最新版本。目前落后多个主版本,纠结两种方案:
- 按5.0→5.2→6.0→6.1→7.0→7.0.2的方式增量升级
- 彻底重构应用(创建新ROR应用,依次集成模型、数据库迁移、Gem、配置、视图与控制器、资源)
额外挑战是当前应用无测试用例,希望得到高效低风险的方案建议,也欢迎有类似经验的人士分享见解。
当前Gemfile
source 'https://rubygems.org' gem 'rails', '5.0.0.beta2' gem 'sass-rails', '~> 5.0' gem 'uglifier', '>= 1.3.0' gem 'coffee-rails', github: "rails/coffee-rails" gem 'jquery-fileupload-rails' gem 'jquery-ui-rails' gem 'turbolinks', '~> 5.2.0' gem 'jbuilder', '~> 2.0' gem 'puma' gem 'bcrypt', '~> 3.1.15' group :development, :test do gem 'byebug' gem 'factory_girl_rails' gem 'capybara' gem 'guard-rspec' gem 'rspec-rails' gem "letter_opener" end group :development do gem 'web-console', github: 'rails/web-console' gem 'spring' end gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] gem 'pg' gem "simple-navigation" gem 'ancestry' gem 'multilang-hstore', '~> 1.0.0' gem 'acts_as_list' gem 'mini_magick' gem 'carrierwave' gem "autoprefixer-rails" gem 'redis' gem 'hiredis' gem 'nokogiri' gem 'rack-cors' gem 'amoeba' # for amoeba_dup gem 'wicked' # Multistep Forms gem 'premailer-rails' gem 'paypal-sdk-rest' gem 'prawn' gem 'prawn-table' gem 'barby', '0.6.8' gem 'responders' gem 'will_paginate', '~> 3.3' gem 'coupon_code' gem 'pg_search' gem 'dotenv-rails', :require => 'dotenv/rails-now' gem "recaptcha", require: "recaptcha/rails" gem "select2-rails" gem 'logidze' gem 'woocommerce_api' gem 'oauth2' gem 'rest-client' gem 'paypal-checkout-sdk' gem 'invisible_captcha'
前期准备工作
- 已清理不必要的Gem
- 搭建了FreeBSD 13虚拟机用于测试配置
- 将PostgreSQL数据库备份导入新版本时,使用PostgreSQL 11可正常工作
升级进展更新(09.24)
遵循建议执行bundle install和bundle update后,逐步升级应用变得相当顺利。但最初运行bundle update时因Gem及依赖过时遇阻,关键解决办法是先安装最新版本的Bundler。之后移除了所有不再使用的Gem和库,仅用三天就完成了Ruby和Rails的当前版本升级。
升级后的真正挑战是集成Turbo、JSBundling等现代工具,使应用符合当前标准。
内容的提问来源于stack exchange,提问作者Christian Bischoff
相关产品推荐
相关产品推荐

