はじめに
- Cloud9環境下でRails6×Dockerの環境構築を試みるもまとまった生地がなく苦労したため執筆(自分用)。
- 複数の情報源からかき集めた手順、エラー対処等の組み合わせのため、不要な記述等がある可能性が高いです
- プログラミング学習2か月目の初心者です。誤りなどありましたらお教えいただけると幸いです。
参考
- https://qiita.com/hello_sk/items/803d0f0c97b7c4d19403
-
https://www.youtube.com/watch?v=Fq1PH0Gwi8I&ab_channel=FarStep%E3%80%90%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%AC%9B%E5%BA%A7%E3%80%91
(→Rails5の場合の構築手順をまとめられています。主にこちらを参照) -
https://zenn.dev/yuma_ito_bd/scraps/1adb89dfe0661c
(→Rails6の場合に追記する必要のある部分などはこちらから参照) - https://c-a-p-engineer.github.io/tech/2021/07/05/docker-mysql/
- https://qiita.com/higaki-takanori/items/b46eecdf0de740716418
-
https://kim-shun.hatenablog.com/entry/2021/07/19/080548
(→詳細は省きますがこれらの記事に紹介されているエラーが出たので、対処のため一部記述を頂いています)
環境
- Ruby 3.1.2
手順
※Docker,Docker-composeがインストールされている状態で始めます
1. 必要ファイルの作成
新規にディレクトリを作成して、cdで移動。ターミナルに
$ touch Dockerfile
$ touch docker-compose.yml
$ touch Gemfile
$ touch Gemfile.lock
でファイルを作成する。
2. Dockerfileの記述
※webpackerを利用するためにyarn,npmが必要。以下のように記述するとインストールされる。あとから$ docker-compose run web yarn install
を実行してもエラーを吐くのでこの段階で記述する必要あり。
Nodeのバージョンが高すぎることでエラーになる場合もあるため、動作確認できているバージョンを指定します。
FROM ruby:3.1.2
RUN apt-get update -qq && apt-get install -y postgresql-client
RUN mkdir /myapp
WORKDIR /myapp
RUN apt-get install -y nodejs npm && npm install n -g && n 16.19.1
RUN npm install --global yarn
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp
3. docker-compose.ymlの記述
version: '3'
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
POSTGRES_HOST_AUTH_METHOD: 'trust'
ports:
- "3306:3306"
volumes:
- ./db/mysql/volumes:/var/lib/mysql
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 8080 -b '0.0.0.0'"
volumes:
- .:/myapp
- gem_data:/usr/local/bundle
ports:
- 8080:8080
depends_on:
- db
tty: true
stdin_open: true
volumes:
gem_data:
Cloud9用のポート指定と、MySQLのパスワード周りで発生するエラーに対応する記述をしてあります。
4. Gemfileの記述
source 'https://rubygems.org'
gem 'rails', '6.1.7.3' #適したバージョンを指定
5. Gemfile.lockの記述
こちらは何もかかなくてOK。
6.アプリケーション作成
$ docker-compose run web rails new . --force --database=mysql --skip-bundle
これで初めに作ったディレクトリ配下にRailsアプリケーションのひな型が作成されます。
7.編集権限設定
$ sudo chown -R $USER /home/ec2-user/environment/myapp
#対象のフォルダは自分の環境に合わせてください
編集権限がなくファイルに記述を加えられないことがあるので、上記のコマンドで事前に解消します。
8./config/database.ymlに記述
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: password
host: db
MySQLの設定をしています。先ほどdocker-compose.ymlで記述した値に合わせます。
権限系の警告が出てしまう場合は以下の記事を参考に権限設定を変更してみます。
https://qiita.com/hello_sk/items/803d0f0c97b7c4d19403
9.config/environments/development.rbに記述
Rails.application.configure do
#省略
config.hosts.clear
end
一番下の行に追記します。
10.起動前の設定、→ビルド
$ docker-compose run web bundle install
$ docker-compose run web rails webpacker:install
$ docker-compose build
ブラウザにNoDatabaseErrorが表示されたらOK。
11.データベースの作成
新たにターミナルを立ち上げて、以下を実行。
$ docker-compose run web rails db:create
12. 起動
$ docker-compose up
Railsのトップページが表示されていれば成功です。