Railsアップグレードをした際の知見

updated_at: 2023-04-30

概要

自分の会社でproduction運用しているアプリケーションのRailsバージョンをアップグレードした際の振り返り

背景

新機能追加にあたってCTIでテーブル設計をして、ActiveRecord::DelegatedType(以下DelegatedType) を利用したかった
ただ、DelegatedTypeはRails6.1.0からしか利用できないので、アップグレードが必要だった

詰まったこと

  • GLIBC_2.29以上が必要だった
    • それに伴いRubyのバージョンをアップグレード
  • PostgreSQLのバージョンが見当たらなかった


GLIBC_2.29以上が必要だった

Railsを6.0.2から6.1.0にアップグレードした際、nokogiriインストール時にGLIBC_2.29がないと怒られた

ERROR: It looks like you're trying to use Nokogiri as a precompiled native gem on a system with glibc < 2.17:
 /lib/aarch64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /bundle/ruby/2.6.0/gems/nokogiri-1.13.8-aarch64-linux/lib/nokogiri/2.6/nokogiri.so) - /bundle/ruby/2.6.0/gems/nokogiri-1.13.8-aarch64-linux/lib/nokogiri/2.6/nokogiri.so
 If that's the case, then please install Nokogiri via the `ruby` platform gem:
   gem install nokogiri --platform=ruby
 or:
   bundle config set force_ruby_platform true

アプリケーションのRubyイメージ (2.6.7-slim)では、GLIBCが2.28であることから、GLIBC2.29以上が同梱されたイメージを利用する必要があった

そのため、Rubyのアップグレードも同時に行いイメージを2.7.6-slimにして、GLIBCを2.31にしたらinstallに成功

# ldd --version
ldd (Debian GLIBC 2.31-13+deb11u4) 2.31
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.

良い機会だからRubyのアップグレードまで行ったが、GLIBCの指定バージョンをインストールするだけでも良かった

PostgreSQLのバージョンが見当たらなかった

修正前はdeb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg mainで探していたが見つからないと怒られる

#5 33.87 Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
#5 34.28 OK
#5 35.11 cat: /tmp/Aptfile: No such file or directory
#5 35.11 Reading package lists...
#5 35.42 Building dependency tree...
#5 35.52 Reading state information...
#5 35.57 E: Unable to locate package postgresql-client-11


Rubyのimageを変えたのでDebianバージョンが変わったから見つからないのではと考えたらその通りだった

$ docker run --rm ruby:2.7.6-slim sh -c "cat /etc/*-release"
Unable to find image 'ruby:2.7.6-slim' locally
2.7.6-slim: Pulling from library/ruby
3d898485473e: Already exists
755e58a55855: Already exists
68a9083723f3: Already exists
b8edf3cdc5de: Already exists
93fc5708079e: Already exists
Digest: sha256:86f0a40ff15ddb9fbdc0a64bcf9ad4e048fec31a3e538a79a526b0461fca9bf8
Status: Downloaded newer image for ruby:2.7.6-slim
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUGREPORTURL="https://bugs.debian.org/"

bullseyeだったので、deb http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg mainで探すと見つかった

まとめ

本番稼働しているアプリケーションのFWバージョンを上げるのは中々できないと思うのでとても良い経験になった
色々と詰まってしまったが、自分で一つ一つ調査して解決できた経験を次に活かしたい