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

published_at: 2022-12-20

概要

自分の会社で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がないと怒られた

1ERROR: It looks like you're trying to use Nokogiri as a precompiled native gem on a system with glibc < 2.17: 2 /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 3 If that's the case, then please install Nokogiri via the `ruby` platform gem: 4 gem install nokogiri --platform=ruby 5 or: 6 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に成功

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

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

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

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

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

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

1$ docker run --rm ruby:2.7.6-slim sh -c "cat /etc/*-release" 2Unable to find image 'ruby:2.7.6-slim' locally 32.7.6-slim: Pulling from library/ruby 43d898485473e: Already exists 5755e58a55855: Already exists 668a9083723f3: Already exists 7b8edf3cdc5de: Already exists 893fc5708079e: Already exists 9Digest: sha256:86f0a40ff15ddb9fbdc0a64bcf9ad4e048fec31a3e538a79a526b0461fca9bf8 10Status: Downloaded newer image for ruby:2.7.6-slim 11PRETTY_NAME="Debian GNU/Linux 11 (bullseye)" 12NAME="Debian GNU/Linux" 13VERSION_ID="11" 14VERSION="11 (bullseye)" 15VERSION_CODENAME=bullseye 16ID=debian 17HOME_URL="https://www.debian.org/" 18SUPPORT_URL="https://www.debian.org/support" 19BUGREPORTURL="https://bugs.debian.org/"

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

まとめ

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