初歩的な内容ですが質問させてください。
経緯と教えていただきたいこと
現在、既存HerokuにデプロイしているRailsアプリケーションの開発環境をDockerで構築しています。
Dockerfileとdocker-compose.ymlを作成し、build後にdocker-compose up
してdocker-compose exec rails bash
してコンテナの中に入りrails console
をしても、rails: command not found
とエラーとなっていました。(この時のbundlerのバージョンは最新の2.1.4)
Dockerfileのgem install bundler
にバージョン指定してgem install bundler:2.0.2
とすると、build後にdocker-compose up
してdocker-compose exec rails bash
してコンテナの中に入るとrails console
が普通に叩けることがわかりました。
バージョン2.1.4のbundlerではおそらくGemがインストールされていないためrailsコマンドが叩けなかったかと思いますが、インストールできなかった理由はどうしてなのか、教えていただきたく存じます。よろしくお願いします。
gem install budler:2.0.2 と指定した理由
【circleCI】Railsアプリでgithubと連携してrubocopとrspecテストを走らせる記事を参考にしました。
① bundler2.0.1以降のものを使っているとbundle install に失敗します。(Dockerと同じですね。)
ということだったので、Dockerイメージを作る際にも、2.0.2
を指定したら良いのでは?と考えました。
エラーの事象
コンテナ内でbundle install
すると成功はするもののrailsコマンドを叩けない状況でした。
bash
1root@744b84e19ac7:/myapp# bundle install 2~ 3Bundle complete! 48 Gemfile dependencies, 397 gems now installed. 4Bundled gems are installed into `/usr/local/bundle` 5root@744b84e19ac7:/myapp# rails console 6bash: rails: command not found
コンテナを停止・削除し(docker-compose down
)、ビルドしなおしても状況は変わらなかったです。
調べたこと
- dockerhubのイメージを確認しました
dockerhubで使用しているイメージruby:2.5.3を確認しましたが、bundlerのバージョン指定(ENV BUNDLER_VERSION
)はされていないことを確認しました。
- コンテナ上でbundlerのバージョンを確認しました
- エラー時
bash
1root@744b84e19ac7:/myapp# bundle -v 2Bundler version 2.1.4 3root@744b84e19ac7:/myapp# rails console 4bash: rails: command not found
- 正常時
bash
1root@89073f9111d6:/myapp# bundle -v 2Bundler version 2.0.2 3root@89073f9111d6:/myapp# rails console 4Running via Spring preloader in process 70 5Loading development environment (Rails 5.2.3) 6[1] pry(main)>
使用しているファイル
Dockerfile
1FROM ruby:2.5.3 2RUN apt-get update && apt-get install -y build-essential libpq-dev nodejs 3WORKDIR /myapp 4COPY Gemfile /myapp/Gemfile 5COPY Gemfile.lock /myapp/Gemfile.lock 6# バージョンを2.0.2に指定するとrailsコマンドを叩ける(正常にGemをインストールできている?) 7RUN gem install bundler:2.0.2 && bundle install 8COPY . /myapp
docker
1version: '3' 2services: 3 db: 4 image: postgres 5 ports: 6 - '5432:5432' 7 volumes: 8 - pgdata:/var/lib/postgresql/data 9 environment: 10 POSTGRES_HOST_AUTH_METHOD: trust 11 rails: 12 build: . 13 command: bundle exec rails server -p 3000 -b '0.0.0.0' 14 depends_on: 15 - db 16 ports: 17 - '3000:3000' 18 volumes: 19 - .:/myapp 20volumes: 21 pgdata:
エラー事象は解決できておりますので急ぎではありませんが、よろしくお願いいたします。
あなたの回答
tips
プレビュー