【database.yml】DBをDockerとrails server両方で使えるように設定


Dokerで開発時に、docker-compose rundocker-compose run よりも早いrails serverで一時的に動作確認をしたい場合があるかと思う。
そういった場合にも、以下のconfig/database.yml内の記述だけで対応することができる。

検証環境

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.15.3
BuildVersion:   19D76
$ ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin19]
$ rails -v
Rails 5.2.4.2

database.ymlについて

まず、database.ymlとは

config/database.yml(例)

default: &default
  adapter: mysql2
  encoding: utf8
  collation: utf8_general_ci
  pool: 5
  host: <%= ENV['MYSQL_HOST'] || 'localhost' %>
  username: <%= ENV['MYSQL_USERNAME'] || 'root' %>
  password: <%= ENV['MYSQL_PASSWORD'] || '' %>
  socket: /tmp/mysql.sock

主な内容

adapter: 使用するデータベースの種類(postgresql, mysql2等)

encoding: 文字コード

collation: MySQLの文字列と照合順序(ソート順)、”文字コード言語名比較法”で構成される

pool: 確保する接続プールの数

host: データベースが動作しているホスト名またはIPアドレス

username,password: データベースに接続するユーザー名・パスワード

socket: DB通信の接続口

比較演算子: ||

orと同じ働きをする。
Ruby 2.7.0 リファレンスマニュアル 演算子式

文法:

式 `||' 式
式 or 式
左辺を評価し、結果が真であった場合にはその値を返します。左辺の評価結果が偽であった場合には右辺を評価しその評価結果を返します。

config/database.ymlのhost,username,passwordの部分をこれで書くことで、ENV['MYSQL_HOST']等の環境変数がない場合に、localhost等を返してくれる。

終わりに。

最後まで読んで頂きありがとうございます
転職の為、未経験の状態からRailsを学習しております。正しい知識を着実に身に着け、実力のあるエンジニアになりたいと考えています。継続して投稿していく中で、その為のインプットも必然的に増え、成長に繋がるかと考えています。
今現在、初心者だからといって言い訳はできないですが、投稿の内容に間違っているところや、付け加えるべきところが多々あるかと思いますので、ご指摘頂けると幸いです。この記事を読んで下さりありがとうございました。

参考にさせて頂いた記事