アウトプットの練習 & 初心に帰って基礎からRailsを見直してこうと思います。
不定期に更新します。
今回はRuby on Railsの環境構築。
今回はDockerでRailsチュートリアルを進めていくためのRailsプロジェクトを作ります。
rbenvなどを用いたローカルでの環境構築ではないです。
前置き
前提として...
- 以下の場合はローカルでの環境構築を勧めます
- railsの環境構築1度もしたことない
- dockerを使った開発をしたことがない(Dockerfileの記述がわからない)
アプリケーション要件
- ruby 2.6.5
- rails 6.2.0
- sqlite3
- webpacker、springはとりあえず不要なので除く
すごいざっくりですが、こんなイメージ、コンテナを作るのがゴールです。
レッツ環境構築
STEP1 rails newコマンドまでの準備
PJ用のディレクトリを作成してその中で作業していきます。
まずは必要になるファイルを用意しましょう。
touch Dockerfile docker-compose.yml Gemfile Gemfile.lock .gitignore
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
ruby '2.6.5'
gem 'rails', '~> 6.0.2', '>= 6.0.2.1'
FROM ruby:2.6.5-alpine
ENV LANG="C.UTF-8" \
PACKAGES="curl-dev build-base alpine-sdk tzdata sqlite-dev less ruby-dev nodejs"
RUN apk update && \
apk add --no-cache --update $PACKAGES
WORKDIR /var/www
COPY ./ ./
RUN gem install bundler && \
bundle install -j4
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0", "-p", "3000"]
version: '3'
services:
app:
build:
context: ./
dockerfile: Dockerfile
volumes:
- ./:/var/www
ports:
- "3000:3000"
tty: true
stdin_open: true
restart: always
# Ignore bundler config.
/.bundle
# Ignore the default SQLite database.
/db/*.sqlite3
/db/*.sqlite3-journal
/db/*.sqlite3-*
# Ignore all logfiles and tempfiles.
/log/*
/tmp/*
!/log/.keep
!/tmp/.keep
# Ignore uploaded files in development.
/storage/*
!/storage/.keep
/public/assets
.byebug_history
# Ignore master key for decrypting credentials and more.
/config/master.key
.idea
.vscode
.DS_store
一旦ここまで作ってしまいます。
(.gitignoreはお好みあれば)
ここまで作ったらイメージを作成します。
docker-compose build
STEP2 Railsプロジェクトの作成、微修正
buildが完了したら、いよいよRailsプロジェクトを作成します。
-d sqlite -> 使用DBをsqlite3を選択
-B -> プロジェクト作成後のbundle installをしない(修正するからスキップで)
--skip-webpack-install -> プロジェクト作成後のwebpacker:installをしない
--skip-spring -> プロジェクト作成後のspringのinstallをしない
docker-compose run --rm app rails new -d sqlite3 -B --skip-webpack-install --skip-spring .
コマンド実行すると、いくつかのファイルがもう存在するけどどうする〜?みたいに聞かれます。
.gitignoreファイルは上書きなし、Gemfileは上書きしてしまいましょう。
conflict .gitignore
Overwrite /var/www/.gitignore? (enter "h" for help) [Ynaqdhm] n
skip .gitignore
conflict Gemfile
Overwrite /var/www/Gemfile? (enter "h" for help) [Ynaqdhm] Y
force Gemfile
Gemfileにあるwebpackerの記述を消しましょう
# 下記二行を削除
# Transpile app-like JavaScript. Read more: https://github.com/rails/webpacker
gem 'webpacker', '~> 4.0'
サーバー立ち上げた後にsw.jsが無いとエラーを吐きまくるので仮で作っておきましょう。
touch public/sw.js
ここまでくればもう少し、bundle installとdbの作成、マイグレーションを実行します。
その前にgemを更新するため、再度ビルドしてあげましょう。
docker-compose build
docker-compose run --rm app rails db:create
docker-compose run --rm app rails db:migrate
STEP3 Railsプロジェクトの起動
あとはコマンド一つでRailsサーバーが立ち上がります。
docker-compose up -d
http://localhost:3000 で立ち上がるのを確認しましょう。
やったぜ。
終わりに
出来上がりのソースコードはこちらに置いてあります。(変更あるかもしれませんが)
RubyMineを最近購入したのでこれからウッキウキでコード書こうと思います。
Railsに関しての記事をこれから不定期ですが粛々とアップしていきますのでよければ!