📚

Nokogiriの互換性エラー

2025/01/29に公開

このエラーは、Nokogiriがシステムのglibcバージョンと互換性がないために発生しています。Amazon Linux 2 はデフォルトで glibc 2.26 を使用しており、Nokogiriが要求している glibc 2.28 ではないため、ライブラリがロードできずエラーが発生しています。

解決策

1. NokogiriをRubyプラットフォームで再インストール

Nokogiriをプリコンパイルされたバイナリではなく、Rubyネイティブビルドとしてインストールすることで解決できる可能性があります。

以下のコマンドを試してください

cd ~/environment/postgresql  # Railsプロジェクトのディレクトリへ移動
bundle config set force_ruby_platform true
bundle install

この設定 (force_ruby_platform true) により、プリコンパイルされたバージョンではなく、ソースコードからコンパイルされるバージョンがインストールされます。

2. Nokogiriを手動でインストール

もし上記で解決しない場合、以下の方法でNokogiriを手動でインストールしてみてください。

gem uninstall nokogiri
gem install nokogiri --platform=ruby

その後、Railsプロジェクト内で bundle install を実行してください。

3. GLIBCをアップグレード

もしどうしても glibc 2.28 が必要な場合、EC2 (Amazon Linux 2) に glibc 2.28 を手動でインストールする方法もありますが、これはリスクが高いため基本的には推奨しません

どうしても glibc をアップグレードしたい場合、Amazon Linux 2023 への移行を検討するか、Dockerコンテナを使うことも選択肢です。

4. sprockets-railsのインストール

また、エラーメッセージの中に LoadError: cannot load such file -- sprockets-rails という記述があるので、sprockets-rails も不足している可能性があります。

以下のコマンドでインストールできます。

bundle add sprockets-rails
bundle install

まとめ

  1. bundle config set force_ruby_platform true を実行し、bundle install でNokogiriを再インストール。
  2. うまくいかなければ、gem install nokogiri --platform=ruby を試す。
  3. sprockets-rails を追加して bundle install する。
  4. それでも解決しない場合は、Amazon Linux 2 を glibc 2.28 にアップグレードするか、Amazon Linux 2023 へ移行する。

まずは 1 から試してみてください!

Discussion