docker-compose で Ruby on Rails の環境を作る
モチベーション
Ruby, Ruby on Railsともに初めてなのでチュートリアルを完遂したい
Ruby on RailsチュートリアルではGithub Codespaceがおすすめされてるけど意地でも環境構築したい
とはいえローカルに直接インストールしたくないのでDocker上に構築する
Copilot Chat に聞いてみる
VS CodeにChatが追加されていることに気がついたので聞いてみた
適当英語で聞いたら日本語で返されたでござる
バージョン古い?
FROM ruby:2.7.2
って古くないか?
Rubyのダウンロードページでは3.2.2が安定版で2.7.6がEOLらしい
ベースイメージはruby:3.2.2-bullseye
にしてみる
Railsのバージョンもgem 'rails', '~>6'
と6系を指定してるが、最新の7.1.2
にする。
不思議に思いながらも辿ってみた
9.再度Dockerイメージをビルドします
とか絶対必要ないよなーと思いながらも素直にやってみる
8番まで終わってわかった。rails newでDockerfileが作成されてる。さっきまでのDockerfileどこいった…。
rails newのブラックボックスは一旦受け入れて進める
さすがに動かない
よかった
ポスグレにパスワードを設定していない
Error: Database is uninitialized and superuser password is not specified.
You must specify POSTGRES_PASSWORD to a non-empty value for the
superuser. For example, "-e POSTGRES_PASSWORD=password" on "docker run".
書いてあるとおり。docker-compose.ymlで環境変数を渡してあげる
secret_key_base がない
/usr/local/bundle/ruby/3.2.0/gems/railties-7.1.2/lib/rails/application.rb:655:in `validate_secret_key_base': Missing `secret_key_base` for 'production' environment, set this string with `bin/rails credentials:edit` (ArgumentError)
raise ArgumentError, "Missing `secret_key_base` for '#{Rails.env}' environment, set this string with `bin/rails credentials:edit`"
これも書いてあるとおり。RAILS_ENV=development
にしてあげる
ポスグレに接続できていない?
ActiveRecord::ConnectionNotEstablished (connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory
Is the server running locally and accepting connections on that socket?
):
ローカルのソケットからアクセスしに行ってるようだがdbコンテナに接続しないといけないはず。
config/database.yml
内のhost: db
が効いてない?
コンテナ内に入ってdatabase.yml
を見てみた。手順10の変更が反映されていない。
よくみるとカレントディレクトリが/rails
になっている。マウントしているのは/myapp
なのでそりゃそうだ。
docker-compose.yml
を編集し、/rails
にマウントしてみると無事railsの初期画面が表示された。
やっとチュートリアル始められる…。
内容これと同じやんね
Dockerfileが生成されるのはRails 7.1からだった
こちらの記事にあるように開発用のDockerfileを作るのが良さそう