LoginSignup
0
0

More than 1 year has passed since last update.

Docker+Rails6+MySQLで環境構築をして爆速で投稿機能を作る。

Last updated at Posted at 2021-05-18

今回は投稿機能をRails6の新機能であるScaffoldを使って投稿機能を作る+環境構築をやっていきたいと思います。

まずは環境構築から。

手始めにターミナルで

mkdir sampleApp

と打ってください。
ちなみにsampleAppの部分は便宜上入れただけなので、好きななまえで大丈夫です。ただし英語のほうがベター

その後に

cd sampleApp

で自分の作ったディレクトリに移動してください。

移動したら

vi Dockerfile

スクリーンショット 2021-05-18 17.42.17.png

というコマンドを打つと上の画面のようになり、ターミナル上でDockerfileを編集することができます。
わざわざテキストエディタを開かなくても大丈夫というメリットがあります。

そしたら、

FROM ruby:2.6.5

# 必要なパッケージのインストール(基本的に必要になってくるものだと思うので削らないこと)
RUN apt-get update -qq && \
    apt-get install -y build-essential \ 
                       libpq-dev \
                       imagemagick

# yarnパッケージ管理ツールをインストール
RUN apt-get update && apt-get install -y curl apt-transport-https wget && \
  curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
  echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
  apt-get update && apt-get install -y yarn

# Node.jsをインストール
RUN curl -sL https://deb.nodesource.com/setup_7.x | bash - && \
  apt-get install nodejs        

# 作業ディレクトリの作成、設定
RUN mkdir /app_name 
##作業ディレクトリ名をAPP_ROOTに割り当てて、以下$APP_ROOTで参照
ENV APP_ROOT /app_name 
WORKDIR $APP_ROOT

# ホスト側(ローカル)のGemfileを追加する(ローカルのGemfileは【3】で作成)
ADD ./Gemfile $APP_ROOT/Gemfile
ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock

# Gemfileのbundle install
RUN bundle install
ADD . $APP_ROOT

とコピペして入力してください。ただ、Railsのバージョン自体は自由に変えていただいても大丈夫です。
そうしたら:wqで上書き保存をしてください。

そしたら次に

vi Gemfile

でGemfileを作成・へんしゅうしてください。

それでその中に

source 'https://rubygems.org'
gem 'rails', '6.0.0'

を入れて:wqで上書き保存をしてください。

次に、touchコマンドでGemfile.lockを作成します。

こんな感じです。

touch Gemfile.lock

次に、docker-compose.ymlを作成します。

vi docker-compose.yml

でdocker-compose.ymlというファイルが自動で生成されて自動で編集画面に行けるので、そうしたら

version: '3'
services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: root
    ports:
      - "3306:3306"

  web:
    build: .
    command: rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/app_name
    ports:
      - "3000:3000"
    links:
      - db

myaqlのあとの5.7の部分はバージョンを指定しているのですが、使いたいバージョンを自由に指定してください。
のコマンドを実行した後:wqコマンドで上書き保存してください。
そうしたら

docker-compose run web rails new . --force --database=mysql --skip-bundle

というコマンドでMySQLを使ったRailsのアプリケーションができます。

次に、databese.ymlを編集していきます。
今回作ったアプリとアプリの中のデータベース(MySQLで構成された)と接続するための設定ファイル。

まずは

cd config
vi database.yml

を上から順番に実行してください。
そしたらdatabase.ymlが編集できる画面にいけますのでそこで

default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: 
  host: localhost

となっている部分がありますので、それを

default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: password
  host: db

に変更してください。
encodingの部分をutf8にしないと文字数の制限があるので投稿しようとしてMySQLに接続した際にエラーが起きてしまいます。
passwordの部分を設定することで、docker-compose.ymlの部分のMySQLにRoot権限で接続するときのパスワードを設定します。
hostの部分を設定することで、MySQLが動作しているホスト名を設定します。今回はdbに変えます。

そうしたらESCコマンドを押して半角英数で:wqと入力して上書き保存をします。

そうしたら、先程書いたDockerfileとdocker-compose.ymlの設定を反映した状態でコンテナをビルドしていきます。

docker-compose build

これでしばらく待ちましょう。
これでもし以下のエラーが出たら

Could not find gem 'mysql2 (>= 0.4.4)' in any of the gem sources listed in your Gemfile.

以下のコマンドで対処してください。

docker-compose run web bundle install

で対処すれば大丈夫です。

その後にまた

docker-compose build 

を打ってください。
これでコンテナをビルドできました。
そしたら、

docker-compose run web rails webpacker:install

でRailsの環境構築に必要なwebpackerをインストールしたら環境構築は完了です。
そうしたら一旦念の為にコンテナをビルドしたほうがいいと思います。
docker-compose buildですね。

そうしたらいよいよ起動です。
起動コマンドは

docker-compose up

です。
これでRailsの初期画面が出てきたら完了です。

投稿機能作成の手順

まずはじめにcdコマンドを打って自分のアプリケーションに移動してください。

その後に

docker-compose run web rails generate scaffold post content:text

と打ってエンターを押してください

postから先は自由に決めてください。
これでデータベースの型ができました。

そしてその後に

docker-compose run web rails db:migrate

を実行して作成したマイグレーションファイルの設定などのDB周りの設定の部分をDBに反映してください。

これで完了しました。

参考記事

この記事のコードをかなりパクって作成しました。
それではまた。

0
0
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
0
0