インフラは苦手だけどRails環境を整えたい!
DockerでRails環境を作ろう系の記事を読んで作ってみたけど途中で動かなくなった!
みたいなインフラアレルギー持ちのプログラマ向けの記事です。
「Dockerで Ruby on Rails の環境を作ってみた」系の記事は既にいくつかあるものの、状況によって実行するべきコマンドが違うみたいで非常にややこしい。私の頭が弱すぎるのが悪い?そんな馬鹿な。
「とにかくプログラミングがしたいだけなのになんで環境作りで躓かないといけないんだ!俺はもうLAMP環境に帰らせてもらうぞ!」と死亡フラグを立ててしまわない為に、各コマンドを実行する目的を整理しておくことにしました。
全体的なセットアップ手順や詳細は下記の記事を参考にしています。
この記事では補足的な内容しか取り扱いません。
Rails環境を構築したことがないぞって人はまずは先人の記事を読んできましょう。
DockerでRuby on Railsの環境構築【初心者向け】
新規Railsプロジェクトの作成手順まとめ
自分なりに調べた結果の解釈を添えてありますが、間違っている箇所があればご指摘をお願いします。
アレルギー持ちの人間は時として常軌を逸する解釈をしたりします。助けてスーパーインフラエンジニア。
コンテナ作成時
$ docker-compose build
Dockerfileとか設定ファイルの準備が終わったらこのコマンドを実行する。
LAMP環境とか作る時と変わらないのでつまづく心配はないと思う。
ここでつまづくならとりあえずDockerComposeの使い方を調べてこようか。
コンテナ起動時
$ docker-compose up -d
これも同じく。
コンテナがうまく起動していない、すぐに落ちてしまう。
なんて時はオプションの -d を外してログを確認してみよう。
エラー内容で検索すれば大体なんとかなる。
Gemfileからプロジェクトを作る時に実行するやつ
$ docker-compose run web rails new . --force --database=mysql
DockerでRailsの環境を作ろうぜ!系の記事には絶対書いてあるこれ。完全なる罠である。
既に完成済みのRailsプロジェクトをGitから落としてきて環境だけ作りたいって時にはいらないコマンド。
数日前に作ったコンテナを作り直そうって時に何も考えずに実行しちゃって意味わからないことになったりもするんじゃないかな?私はなりました。
本当にイチからRailsのプロジェクトを作ろうって時にだけ実行しましょう。
これを実行するとGemfileを元にプロジェクトに必要なファイルたちがいい感じで作成される。たぶん。おそらく。
DBのスキーマを作成する場合
$ docker-compose run web rake db:create
Railsプロジェクトの設定を元にデータベースのスキーマを作ってくれる。
既にスキーマを作成済みの場合はもちろん実行する必要はない。
DBの作成に失敗しているのに何も言ってくれなかったりする。恐ろしい。
完了メッセージが表示されない限り誰も信じるな。何なら自分でDBの中身を確認しに行け。
DB構造やデータを初期化する場合
$ docker-compose run web rake db:reset
$ docker-compose run web rake db:migrate
いざコンテナが立ち上がってWebサイトにアクセスした際に「マイグレーションが終わってないよ!」みたいなエラーがでる場合がある。
たぶんこのコマンドを実行したら解決すると思う。既にあるデータは丸っと消されるので注意。
手動でDBの中身を色々いじりまくって訳わからなくなった時にも使える子。
DBを初期化したいな!初期に用意したデータにだけ復活してもらいたいな!って時はこれしましょう。
コンテナを停止する時
$ docker-compose down
LAMP環境とかだとstopコマンドを使ってたと思うけど、それだとキャッシュが残って面倒くさいことになるらしい。
Rails環境ではstopコマンドの存在は忘れてください。
downで停止したコンテナを再起動する時
$ docker-compose up -d
downで停止したコンテナを再起動したい時。いつもと同じである。
ちゃんとルールを守ってコンテナを停止したなら何の問題もないよね?
stopで停止しちゃったコンテナを再起動する時
$ rm tmp/pids/server.pid
$ docker-compose up -d
downで止めろと言われても、手癖でstopを実行してしまう時もあるものです。
そんな時はキャッシュファイルを削除してから起動してやりましょう。
キャッシュファイル名を覚えるのは面倒くさいからdownで止めた方が楽だね。そう思ったキミはもう間違えることはないだろう。数日間は。