【Rails】database.ymlとは何か?役割と見方を実例で解説(default, development, test, productionの記述内容と意味)

rails-prograshi(プロぐらし)-kv Rails
記事内に広告が含まれていることがあります。

database.ymlとは何か?

Railsがデータベースに接続するための情報を記載したファイルです。

rails new <アプリ名>でrailsのプロジェクトを新規作成した時に、configディレクトリ配下に自動生成されます。

なおRialsではデータベースを作成するときに、rails db:createコマンドを使います。この時に、Rialsはdatabase.ymlの中身に基づいてデータベースを作成します。

デフォルトのデータベースはsqliteが指定されています。


sqlite以外のデータベースを指定する方法

デフォルトのsqlite以外のDBに変更したい場合は、rails newでオプションを指定すると、指定したDBに合わせたdatabase.ymlを生成します。

rails new <アプリ名> -d <DBの種類>

-d」は「--database」と同じです。


実例

#mysqlの場合
rails new test-app -d mysql

#postgresの場合
rails new test-app -d postgresql


database.ymlの中身

database.ymlの中には、コメントアウトで注釈がたくさん記載されています。

&<<:*などyaml専用の記述が使われています。

参考

.ymlの記述から、.jsonに変換すると見慣れた記述になるので、内容がわかりやすくなります。変換には以下のサイトが便利です。(Code Beautifyという無料のオンラインコンバーターです)

(参考)Code Beautify YAML to JASON converter

以下では、rails new test-app -d postgresqlを実行した時に作成されるdatabase.ymlの中身で解説しています。


全体像

コメントアウトを除いてjsonにコンパイルすると以下のようになります。

default, development, test, productionの4つから構成されていることがわかります。

{
    "default": {
        "adapter": "postgresql",
        "encoding": "unicode",
        "pool": "<%= ENV.fetch(\"RAILS_MAX_THREADS\") { 5 } %>"
    },
    "development": {
        "adapter": "postgresql",
        "encoding": "unicode",
        "pool": "<%= ENV.fetch(\"RAILS_MAX_THREADS\") { 5 } %>",
        "database": "test-app_development"
    },
    "test": {
        "adapter": "postgresql",
        "encoding": "unicode",
        "pool": "<%= ENV.fetch(\"RAILS_MAX_THREADS\") { 5 } %>",
        "database": "test-app_test"
    },
    "production": {
        "adapter": "postgresql",
        "encoding": "unicode",
        "pool": "<%= ENV.fetch(\"RAILS_MAX_THREADS\") { 5 } %>",
        "database": "test-app_production",
        "username": "test-app",
        "password": "<%= ENV['TEST-APP_DATABASE_PASSWORD'] %>"
    }
}


冒頭のコメントアウト

# PostgreSQL. Versions 9.3 and up are supported.
#
# Install the pg driver:
#   gem install pg
# On macOS with Homebrew:
#   gem install pg -- --with-pg-config=/usr/local/bin/pg_config
# On macOS with MacPorts:
#   gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config
# On Windows:
#   gem install pg
#       Choose the win32 build.
#       Install PostgreSQL and put its /bin directory on your path.
#
# Configure Using Gemfile
# gem 'pg'
#

・PostgreSQLの対応するバージョン。9.3以上をサポート。バージョンはpostgres --versionで確認できる。

pgのインストール方法。pgはrailsからPostgreSQLのDBにアクセスするためのライブラリ。

pgを使うには、Postgresがインストールされている必要がある。


default

「default」はデフォルトの設定内容です。

DBの設定は(1)development, (2)test, (3)productionの3つが用意され、それぞれの共通部がこのdefaultになります。

default: &default
  adapter: postgresql
  encoding: unicode
  # For details on connection pooling, see Rails configuration guide
  # https://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

default: &default
&はアンカーとよび、&アンカー名で指定して*アンカー名で呼び出すことができる。

&defaultの配下(adapter~)の塊を*defaultで呼び出せるようになる。

adapter: DBの種類
指定したDB名が記載される。デフォルトはsqlite3

pool: 数値
DBに接続するコネクションプールの上限数。
コネクションプールとは、DBの接続情報を維持しておく機能。(プールは人工的に作った表面上の小さな水たまり。DBの表面情に作ったコネクション用のパスといった感じ)

<%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
rubyの記述。環境変数の中にRAILS_MAX_THREADSがあればその値を適用し、ない場合は5にする。


development

開発環境用のDB設定です。

development:
  <<: *default
  database: test-app_development

先ほどの&アンカーで指定した内容を呼び出しています。以下と同じになります。

development:
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  database: test-app_development

database: DB名
defaultの設定にDB名アプリ名_developmentを追加している。


development, test, porductionの違い

DBの構成としてtestとproductionもありますが中身はほぼ同じです。

共通部分

  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

それぞれの違いはdatabase名の末尾です。productionの場合はusernameとpasswordが追加されます。

development

development:
  database: test-app_development

test

test:
  database: test-app_test

production

production:
  database: test_app_production
  username: test_app
  password: <%= ENV['TEST-APP_DATABASE_PASSWORD'] %>
タイトルとURLをコピーしました