2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

既存のrails6のアプリにMySQLでDockerを導入する。

Last updated at Posted at 2020-07-05

初心者ですが既存のrails6のアプリにMySQLでDockerを導入できたので備忘録として記事を残します。
もし間違っていたら教えていただきたいです。

Ruby on Rails 「途中まで作ったアプリにDockerを導入したい」に挑戦してみる(MySQL / Sequel Pro)

基本的にはこちらの方の記事を参考にさせていただきました。

1 Dockerfile/docker-compose.ymlを既存アプリのルートディレクトリに作成する。

2 Dockerfileを編集する

Dockerfile
FROM ruby:2.6

RUN apt-get update -qq && \
    apt-get install -y build-essential \ 
                       libpq-dev \        
                       nodejs      

RUN mkdir /app_name 

ENV APP_ROOT /app_name 
WORKDIR $APP_ROOT

ADD ./Gemfile $APP_ROOT/Gemfile
ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock

RUN gem install bundler 
RUN bundle install
ADD . $APP_ROOT

FROM ruby:2.6 について

私のアプリはruby2.6.2で作られているので、このように記述しました。

3 docker-compose.ymlを編集する

docker-compose.yml
version: '3'
services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: 'password'
    ports:
      - "4306:3306"

  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/app_name
    ports:
      - "3000:3000"
    depends_on:
      - db

基本的には参考記事通りです。

4 database.yml編集する。

config/database.yml
default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: password
  socket: /tmp/mysql.sock
  host: db
  # host: localhost これは以前までのもので一応コメントアウトで残しておきました。

development:
  <<: *default
  database: 自分のDBの名前

5 docker-compose build でコンテナを作成する。

[自分のアプリ名] $ docker-compose build 
これで新たにDockerのコンテナが作成されます。

一番最初だけ時間がかかるので気長に待ちましょう。

6 Dockerコンテナ上でDB作成&migrationを実行

rails6の場合ここで以下のようなエラーが出ると思います。
ySQL Community Server (GPL)
web_1  | => Booting Puma
web_1  | => Rails 6.0.3.1 application starting in development 
web_1  | => Run `rails server --help` for more startup options
web_1  | sh: 1: yarn: not found
web_1  | 
web_1  | 
web_1  | ========================================
web_1  |   Your Yarn packages are out of date!
web_1  |   Please run `yarn install --check-files` to update.
web_1  | ========================================
web_1  | 
web_1  | 
web_1  | To disable this check, please change `check_yarn_integrity`
web_1  | to `false` in your webpacker config file (config/webpacker.yml).
web_1  | 
web_1  | 
web_1  | 
web_1  | 
web_1  | 
web_1  | Exiting

このエラーを解消したいのでエラー文通りに

config/webpacker.yml
  # Verifies that correct packages and versions are installed by inspecting package.json, yarn.lock, and node_modules
  check_yarn_integrity: false
このようにfalseに変えることでエラーを解消できました。

参考記事
yarnが原因でdocker-compose up ができない ( Your Yarn packages are out of date!)」に挑戦してみる(MySQL / Sequel Pro)

本題に戻ります

[自分のアプリ名] $ docker-compose run web bundle exec rake db:create

このコマンドでDocker上にDBが作成されます。
レコードは最初からになるので注意してください。

[自分のアプリ名] $ docker-compose run web bundle exec rake db:migrate

migrateも忘れずに行いましょう。

7 docker-compose up でコンテナを起動する。

[自分のアプリ名] $ docker-compose up

これでローカルホストで表示できるようになりました。
コンテナが立ち上がったら
http://localhost:3000/
にアクセスしてみてください。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?