🥭

Rails7 × Docker(ruby:3.3.5-alpine3.20) の開発環境構築で詰まったところ

2024/10/14に公開

環境

  • macOS Sonoma Version14.6
  • Dockerdesktop for mac

1. ERROR: Error installing rails:  ERROR: Failed to build gem native extension.

エラー詳細

  • rubyのコンテナ作成後、railsのインストールでエラー

    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
    
  • 各種ファイル

    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
    
  • 改善: 必要なライブラリを追加するようにすると、イメージのサイズを小さくなりました

      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
    

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特有の問題でした
    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 ]
    

解決

  • gemtzinfo-data追加
    # alpineでも必要
    gem "tzinfo-data"
    

4. 結果

  • 起動できました

参照サイト

Discussion