升级或重写 Ruby on Rails 应用程序(Rails 5.0 至 7.1)
嗨,我有一个大型 Web 应用程序(一个具有用户管理、订单等功能的商店,以及一个 ThreeJS 应用程序,它通过 api 控制器与 ROR 应用程序进行通信)。版本为Rails 5.0.0.2beta2; ruby 2.3.1p112 和 postgress 10.19。我想升级到最新版本,因为我们在生产中使用它,我们需要迁移到带有 freebsd 13 的新服务器。并且它不支持旧的 Ruby 安装,因为 OpenSSL 版本太低。我落后了多个主要版本。 最好的方法是什么?增量更新如下:
5.0 -> 5.2 -> 6.0 -> 6.1 -> 7.0 -> 7.0.2
或者完全重写应用程序会更谨慎吗? 因此,创建一个 ROR 应用程序并集成: -> 模型 -> 数据库迁移 -> Gems -> 配置 -> 视图和控制器 -> 资产
另一个挑战是该应用程序目前没有笔试 有人对最有效和风险最小的路径有建议吗?那些面临类似挑战的人分享的任何见解或经验将不胜感激。 预先感谢您。
这是我的 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'
我已经在删除不必要的宝石了。我使用 FreeBSD 13 启动虚拟机,并尝试根据需要配置它。如果我使用 PostgreSQL V11,则可以将 PostgressDB 备份并导入新的 FreeBSD 版本。
更新09.24
我遵循了@spickermann的建议,在成功运行捆绑安装和捆绑更新后,逐步更新应用程序变得非常简单。然而,让捆绑包更新最初发挥作用是具有挑战性的,因为 gem 和依赖项已经过时了。关键是首先安装最新版本的 Bundler,这有助于解决问题。之后,我删除了所有不再使用的不必要的 gem 和库,只用了三天时间就更新到了 Ruby 和 Rails 的当前版本。
真正的挑战在更新后开始,因为我必须集成 Turbo、JSBundling 和其他现代工具以使应用程序符合当前标准。