docker-compose を使うと簡単に Ruby on Rails とデータベースサーバを別々に立ち上げて連携させられるのが便利だと感じます。
しかし、開発で何度も試すときに毎回 docker-compose build
を待つのがたいぎい (広島弁) ので、そのままローカルでも動かせるように config/database.yml
の db
を環境変数にしました。
もっとエレガントな方法があったらお教え下さい。🙇🏽( 教えていただきました! 追記します!)
元の database.yml
では docker-compose 用に host: db
としていました。
development: &default
username: postgres
host: db
adapter: postgresql
それを
development: &default
username: postgres
host: <%= ENV['DATABASE_HOST'] %>
adapter: postgresql
としました。
これにより、環境変数 DATABSE_HOST
により切り分けられ、docker したいときは Dockerfile
を
(前略)
ENV DATABASE_HOST db
と追記しておき、
ローカルで rails server
したいときは
export DATABASE_HOST=localhost
としておけば両方使えました。
追記
コメントで @holidayworking さんに、次のように config/database.yml
で ENV.fetch()
というのを使えば環境変数 DATABASE_HOST が定義されていない環境では localhost に接続されるようになることを教えていただきました。ありがとうございました。
host: <%= ENV.fetch('DATABASE_HOST', 'localhost') %>