DockerでRailsを動かす その2
実現したいこと
Docker上でRailsを動かしたい.その2です.
前回の戦いはこちら
やったこと
以下のファイルを変更,追加してローカルDBに接続できるかを調整
docker-compose.yml
version: '3' services: web: container_name: rails-sample-app build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/usr/src/app ports: - "3000:3000"
database.yml
default: &default adapter: postgresql encoding: utf8 pool: 5 # 以下の3つを追加 username: <%= ENV.fetch('DB_USERNAME', 'root') %> password: <%= ENV.fetch('DB_PASSWORD', 'dummy') %> # RailsサーバとPostgreSQLサーバが同じ場合 host: <%= ENV.fetch('DB_HOST', 'db') %> development: <<: *default database: sample-db test: <<: *default database: sample-db production: <<: *default database: hello_rails_production username: hello_rails password: <%= ENV['HELLO_RAILS_DATABASE_PASSWORD'] %>
env.dev
DB_USERNAME= <usernamehoge> DB_PASSWORD= <passwordhoge> DB_HOST=docker.for.mac.localhost ~
なんかうまくいかないよう.すぐコンテナがダウンしてしまう.
Could not locate Gemfile or .bundle/ directory
とのこと.パスがおかしいのか?
Dockerfileを編集してみる
Dockerfile
FROM ruby:2.3.7 ENV LANG C.UTF-8 RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs ENV APP_ROOT /usr/src/app RUN mkdir $APP_ROOT WORKDIR $APP_ROOT ADD app/Gemfile $APP_ROOT ADD app/Gemfile.lock $APP_ROOT RUN gem install bundler #追加.これが必要? RUN bundle install ADD app $APP_ROOT
$ docker compose build $ docker compose up
また失敗.同じエラーがでる.全然クリティカルな解決ができない...
修正
Dockerfile
FROM ruby:2.3.7 ENV LANG C.UTF-8 RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs ENV APP_ROOT /usr/src/app RUN mkdir $APP_ROOT WORKDIR $APP_ROOT ADD app/Gemfile $APP_ROOT/Gemfile # ここじゃないか...? ADD app/Gemfile.lock $APP_ROOT/Gemfile.lock RUN gem install bundler #追加.これが必要? RUN bundle install ADD app $APP_ROOT
また失敗
Dockerfile
FROM ruby:2.3.7 ENV LANG C.UTF-8 RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs ENV APP_ROOT /app #ここのパスがappであればうまくいく RUN mkdir $APP_ROOT WORKDIR $APP_ROOT ADD app/Gemfile $APP_ROOT/Gemfile ADD app/Gemfile.lock $APP_ROOT/Gemfile.lock RUN gem install bundler RUN bundle install ADD app $APP_ROOT
成功した...
理由がよくわかっていないのが残念だが,コピー先がうまくいっていなかったのだろうか.ディレクトリがうまく作成できていなかったのだろうか
localhost:3000
でつなぐと,Railsの初期画面が...!!!
やっとのことでRailsをDocker上で動かせました.
続く...
参考
以下の記事を参考にさせていただきました.
既存のRailsアプリをDocker化し、ローカルのDBに接続する方法 | Enjoy IT Life
本記事について
本記事は,学習を目的に書かれています.
間違い,改良案などございましたら,コメントしていただけると幸いです.
基本的に編集途中ですので,何を書いてほしいかもコメントいただけると,
その情報を中心に追記します.