結論
結論から言ってしまうとめちゃくちゃしょうもないミスだった。
タイポによりDBに必要なgemが取得できていなかったためにエラーになってしまっていた。
問題のtypo
docker-compose run web rails new . --force --database-postgresql --skip-bundle
正しくはこう。
docker-compose run web rails new . --force --database=postgresql --skip-bundle
公式サイトの内容をコピペすればいいんだけど写経のつもりで自分でコマンドを打っていたのでミスってしまった。
原因はpgがないこと
エラー内容はキャプチャし忘れてしまったがlocalhost:3000
にアクセスするとRailsさんがpgのgemがねえぞ!とお怒りになられている感じだ。
超絶つまんないこと&ミスに気づいていなかったために変に横道にそれてしまい、結果問題解決にそれなりの時間を使ってしまった。
この辺RailsにもDockerにも習熟してないので勘所が掴めずにいたのも問題だったかもしれない。PHPなら気づけたかも…いや言い訳ですな。
ひとまず疑うべき点はぼくの拙い英語の読解力だったのでどこか読み間違えたんだろうか?と思い日本語翻訳プロジェクト版を覗く。
がしかし、当たり前だが各アプリケーションのバージョンなどの更新がされていない点以外に違いを見つけらなかった。
どうやってDockerでgemを入れてやればいいのか?がわからずに15分ほどググることになってしまった。
最初から作り直せば恐らく直るだろうことはわかっていたのだがそれだと何か負けた気がしたので時間を費やしてしまった
だがまぁその価値は多少あったのかなと思う、費用対効果は低いと思うが。
解決編
解決に導いてくれたのは↓。
docker-composeでRails4の開発をする流れ sqlite3からpostgresqlに変更
この投稿の「コンテナ再生成」を見てようやく「ああGemfileを更新してdocker-compose build
でコンテナを再生成する必要があるのか!」と気づく。
あとは同じようにdocker-compose run web rake db:create
してdocker-compose up
してあげれば問題解決。
まとめ
多分本来はrake db:create
ではなく別の方法を取るほうが今回の問題解決としては正しいのかな?と思うがRailsに詳しくないのでよくわからない。
この辺は今後の課題ということでひとまず棚上げしておくつもりだ。
今回DockerでRailsを選択したのもRailsの習熟度を上げつつ、Dockerを理解しようという一石二鳥な試みなので仕方がないかなと考えている。
このレベルの問題はもう少しすれば解決するだろうと思うのでまぁいいかと。
わからなかったら多分Twitterにでも愚痴って誰かからマサカリ投げられるだろうと期待している。
しかし技術書かなにかを購入してきちんとDockerについての理解を深めないと今のままでは中々時間がかかりすぎてしまう気もする。
近々誕生日なのでそのときにでも干し芋かKampa!でも晒してクレクレくんをしようかなと画策中。
どなたかカンパしてくれる OR プレゼントしてくれるといいなーと思ってるけど多分自分で買うことになるんだろうな。
あとお勧めのDocker本とかあったらはてブでもコメントでもいいので教えてくれると助かります。