今回は投稿機能をRails6の新機能であるScaffoldを使って投稿機能を作る+環境構築をやっていきたいと思います。
まずは環境構築から。
手始めにターミナルで
mkdir sampleApp
と打ってください。
ちなみにsampleAppの部分は便宜上入れただけなので、好きななまえで大丈夫です。ただし英語のほうがベター
その後に
cd sampleApp
で自分の作ったディレクトリに移動してください。
移動したら
vi Dockerfile
というコマンドを打つと上の画面のようになり、ターミナル上で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に反映してください。
これで完了しました。
参考記事
この記事のコードをかなりパクって作成しました。
それではまた。