はじめに
記事を見て下さりありがとうございます。
@hayatohanaoka と申します。
今回は仕事で扱っている rais
アプリケーションをM3Mac環境で起動しようとしたら nokogiri
でエラーになったので、その解消法を記事にします。
起こったこと
M3Mac の環境で rails
のアプリケーションを docker componse up
したら cannot load such file -- nokogiri/nokogiri (LoadError)
になった
※ 先輩のubuntu環境ではうまくいっている様子だったので、Mac特有の問題かもしれません
使用していた Dockerfile
は以下です。
FROM ruby:3.2.3-alpine
ENV LANG ja_JP.UTF-8
RUN apk update && \
apk upgrade && \
apk add --no-cache bash build-base git libxml2-dev \
libxslt-dev postgresql-dev linux-headers openssh ruby-dev \
ruby-json tzdata yaml yaml-dev zlib-dev
# Bundler cache
WORKDIR /tmp
RUN gem install bundler
ADD ./Gemfile Gemfile
ADD ./Gemfile.lock Gemfile.lock
RUN bundle install --jobs 10 --retry 3
WORKDIR /app
こいつを docker compose up
してみると...
> docker compose up
〜中略〜
app-1 | => Booting Puma
app-1 | => Rails 6.1.3.2 application starting in development
app-1 | => Run `bin/rails server --help` for more startup options
app-1 | Exiting
app-1 | /usr/local/bundle/gems/activesupport-6.1.3.2/lib/active_support/dependencies.rb:332:in `require': cannot load such file -- nokogiri/nokogiri (LoadError)
cannot load such file -- nokogiri/nokogiri (LoadError)
になりました。
原因
alpine
イメージを使用していたため、glibc
に依存するソースでエラーになっていた
どうやら alpine
イメージは必要最低限のモノだけを用意したイメージなので、一部ライブラリなどで問題が起こる様子。
...全く知らなかった😇😇😇
解決法
以下をdockerfileに追加。
apk add gcompat
以下コマンドを実行
docker compose build --no-cache
docker compose up
最後に
みやみにalpine
を使うと、思わぬところでエラーになるので気をつけよう。
もしエラーになっても上記手順で解決できるが、別のより良い手法を使う方が良さそうな気がする...。