【Rails6.0.0.rc1】rails6のrc版が出たので遊ぶ準備をしてみた


概要

前提

  • docker使います。rubyのあるぱいんのイメージ使います。

やってみた

  • 以下dockerコマンドで遊んだ跡です。
  • この辺を後々、Dockerfileにまとめたりネットワーク設定したりしよう。(→ネットワーク追加しました。2019/05/09)

  • dockerネットワークの作成
    • DB接続などの演習もしたいので専用ネットワークを作成しておく
# ネットワークの名前を宣言しておきましょう。
MY_NETWORK_NAME="(任意のネットワーク名)"

docker network create \
    --driver bridge \
    ${MY_NETWORK_NAME}

# 作成できたか確認
docker network ls

  • DBコンテナの用意(例)
    • せっかくなのでMySQL8.0系を使いましょう。
# ユーザーのパスワードなどを決めておきましょう。
MYSQL_ROOT_PASSWORD="(大文字小文字記号数字)"
MYSQL_PASSWORD="(大文字小文字記号数字)"
# MySQLコンテナ名
MYSQL_CONTAINER_NAME="(任意のコンテナ名)"

# コンテナ作成。(コマンド追加で認証方式は従来のパスワード方式にしておく。)
docker run \
    --detach \
    --env MYSQL_DATABASE=app_development \
    --env MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} \
    --env MYSQL_USER=app \
    --env MYSQL_PASSWORD=${MYSQL_PASSWORD} \
    --env TZ="Asia/Tokyo" \
    --name ${MYSQL_CONTAINER_NAME} \
    --net ${MY_NETWORK_NAME} \
    --tty \
    mysql:8.0 \
    mysqld --default-authentication-plugin=mysql_native_password

# 確認
docker exec -it ${MYSQL_CONTAINER_NAME} mysql -u root -p
Enter password:

mysql> -- DB作成がされているかを確認
mysql> show databases;

  • Rails6.0のコンテナを作成
# Railsコンテナ名
RAILS_CONTAINER_NAME="(任意のコンテナ名)"

# rubyのコンテナを作成。
# (オプションなどは弊社でよく使う設定になっています)
docker run \
    --detach \
    --env APP_DATABASE_PASSWORD=${MYSQL_PASSWORD} \
    --env APP_DATABASE_USER=app \
    --env BUNDLE_APP_CONFIG=/app/.bundle \
    --env TZ="Asia/Tokyo" \
    --name ${RAILS_CONTAINER_NAME} \
    --net ${MY_NETWORK_NAME} \
    --tty \
    --workdir /app \
    ruby:2.6-alpine

# いつものように必要なパッケージをインストールしていきます。

docker exec -it ${RAILS_CONTAINER_NAME} apk update
docker exec -it ${RAILS_CONTAINER_NAME} apk upgrade

# みんな大好きnokogiri用のパッケージたち
docker exec -it ${RAILS_CONTAINER_NAME} apk add --no-cache build-base libxml2-dev libxslt-dev
# DBパッケージ追加。mysqlに変える想定で。
docker exec -it ${RAILS_CONTAINER_NAME} apk add --no-cache mysql-client mysql-dev
# yarnも入れましょう。webpackerで使いそうなので。(タイムゾーンデータもいるらしい)
docker exec -it ${RAILS_CONTAINER_NAME} apk add --no-cache yarn tzdata
docker exec -it ${RAILS_CONTAINER_NAME} yarn install

# 使い捨てのGemfileでRailsのバージョンを指定しましょう
docker exec -it ${RAILS_CONTAINER_NAME} vi Gemfile

# Gemfile内容は以下のように作成
    1   # frozen_string_literal: true
    2   
    3   source "https://rubygems.org"
    4   git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
    5   gem "rails", "6.0.0.rc1"

# bundlerの設定をちまちま
docker exec -it ${RAILS_CONTAINER_NAME} bundle config --local path vendor/bundle
docker exec -it ${RAILS_CONTAINER_NAME} bundle config --local build.nokogiri --use-system-libraries
# 確認
docker exec -it ${RAILS_CONTAINER_NAME} bundle env

# rails6.0.0.rc1 をインストールだ!!
docker exec -it ${RAILS_CONTAINER_NAME} bundle install --path vendor/bundle

# 確認
docker exec -it ${RAILS_CONTAINER_NAME} bundle exec rails --version
> Rails 6.0.0.rc1

# プロジェクト新規作成。さっき作ったGemfileは上書きさせよう。
docker exec -it ${RAILS_CONTAINER_NAME} bundle exec rails new . --database mysql --force

# DB接続の設定
docker exec -it ${RAILS_CONTAINER_NAME} ls -lahF /app/config/
docker exec -it ${RAILS_CONTAINER_NAME} vi /app/config/database.yml

# お試しなのでdevelopment環境の部分を編集する。
    20  development:
    21    <<: *default
    22    database: app_development
    23    username: app
    24    password: <%= ENV['APP_DATABASE_PASSWORD'] %>
    25    host: "MySQLのコンテナ名"

# 早速ためそうぜ!! →→→→6.0から導入されたメソッドが使える!!!!
docker exec -it ${RAILS_CONTAINER_NAME} bundle exec rails console
# Running via Spring preloader in process 1327
# Loading development environment (Rails 6.0.0.rc1)
irb(main):001:0> 'いろはにほへとちりぬるを'.truncate_bytes(25)
=> "いろはにほへと…"

# サーバー立ち上げもできるよ!!
docker exec -it ${RAILS_CONTAINER_NAME} bundle exec rails server
# アクセスできました!!
docker exec -it ${RAILS_CONTAINER_NAME} wget -O - localhost:3000
# Connecting to localhost:3000 (127.0.0.1:3000)
# <!DOCTYPE html>
# <html>
# <head>
#   <title>Ruby on Rails</title>
#   ...

# とりま今日はここまで。

これからやること

  • Dockerfile化
  • DBコンテナの用意 (2019/05/09追記)
  • docker-compose化
  • 新卒組への説明会