🥭
Rails7 × Docker(ruby:3.3.5-alpine3.20) の開発環境構築で詰まったところ
環境
- macOS Sonoma Version14.6
- Dockerdesktop for mac
1. ERROR: Error installing rails: ERROR: Failed to build gem native extension.
エラー詳細
-
rubyのコンテナ作成後、railsのインストールでエラー
- native extention?のbuildで失敗している?
- Rubyのgemをインストールしている際に他のライブラリのインストールを要求してくるnative extensionとは何者か
- native extentionはCやC++で書かれたライブラリのこと
error# gem install rails .... 略 .... Building native extensions. This could take a while... ERROR: Error installing rails: ERROR: Failed to build gem native extension. current directory: /usr/local/bundle/gems/websocket-driver-0.7.6/ext/websocket-driver /usr/local/bin/ruby extconf.rb
- native extention?のbuildで失敗している?
-
各種ファイル
FROM ruby:3.3.5-alpine3.20 # Install dependencies RUN apk update && \ apk add bash # Gemfile and Gemfile.lock COPY Gemfile Gemfile.lock ./ RUN bundle install WORKDIR /app
services: rails: build: . # command: bundle exec rails s -p 3000 -b ' volumes: - .:/app ports: - 3000:3000 tty: true
解決
-
CやC++の基本的なコンパイラやライブラリをインストールすればいい?
-
alpine-sdk
がそれっぽいので追加しました
FROM ruby:3.3.5-alpine3.20 # Install dependencies # alpine-sdk: for building native extensions RUN apk update && \ apk alpine-sdk make bash # Gemfile and Gemfile.lock COPY Gemfile Gemfile.lock ./ RUN bundle install WORKDIR /app
-
-
改善: 必要なライブラリを追加するようにすると、イメージのサイズを小さくなりました
-
Railsで"Failed to build gem native extension"のエラーが出る原因と解決法を参考に、
g++
とmake
のみをインストール - イメージのサイズは、319.11 MB -> 295.26 MB になりました
FROM ruby:3.3.5-alpine3.20 # Install dependencies # g++,make: for building native extensions RUN apk update && \ apk add g++ make bash # Gemfile and Gemfile.lock COPY Gemfile Gemfile.lock ./ RUN bundle install WORKDIR /app
-
Railsで"Failed to build gem native extension"のエラーが出る原因と解決法を参考に、
2. LoadError: cannot load such file -- nokogiri/nokogiri
エラー詳細
- railsサーバーがエラーで起動できない
- のこぎりのファイルのロードができないようです
エラー/app# bundle exec puma Puma starting in single mode... * Puma version: 6.4.3 (ruby 3.3.5-p100) ("The Eagle of Durango") * Min threads: 3 * Max threads: 3 * Environment: development * PID: 53 ! Unable to load application: LoadError: cannot load such file -- nokogiri/nokogiri bundler: failed to load command: puma (/usr/local/bundle/bin/puma) /usr/local/lib/ruby/3.3.0/bundled_gems.rb:75:in `require': cannot load such file -- nokogiri/nokogiri (LoadError) ...以下略...
解決
- M1 mac特有の問題でした
- M1のRails(Docker環境)起動時にnokogiriがLoadErrorとなる問題の解決方法
-
gcompat
のインストールで解決しました
FROM ruby:3.3.5-alpine3.20 # Install dependencies # g++,make: for building native extensions # git: rails newでgitを使うため # gcompat: nokogiriエラー対策 RUN apk update && \ apk add g++ make bash git gcompat # Gemfile and Gemfile.lock COPY Gemfile Gemfile.lock ./ RUN bundle install WORKDIR /app
3. Unable to load application: TZInfo::DataSourceNotFound: tzinfo-data is not present. Please add gem "tzinfo-data" to your Gemfile and run bundle install
エラー詳細
- railsサーバーがエラーで起動できない
-
tzinfo-data
のgemが足りない様子- gemfileにはwindowsの場合のみインストールするようになっていました
- alpineの場合もインストールが必要みたいですね
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem gem "tzinfo-data", platforms: %i[ windows jruby ]
解決
- gem
tzinfo-data
追加# alpineでも必要 gem "tzinfo-data"
4. 結果
- 起動できました
Discussion