- Railsでは、
rails new
をすると、デフォルトだと自動でconfig/database.yml
が作成されるrails new -d
でDBを選ぶオプションになる-d
オプションがなければ、sqlite3の使用を前提としたdatabase.yml
が生成される
- .ymlはYAML(ヤムル)と呼ばれる拡張子で、データを整理するためのフォーマット
- Rubyのハッシュっぽい記述法
実際のファイル。
config/database.yml
# SQLite. Versions 3.8.0 and up are supported. # gem install sqlite3 # # Ensure the SQLite 3 gem is defined in your Gemfile # gem 'sqlite3' # default: &default adapter: sqlite3 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> timeout: 5000 development: <<: *default database: db/development.sqlite3 # Warning: The database defined as "test" will be erased and # re-generated from your development database when you run "rake". # Do not set this db to the same as development or production. test: <<: *default database: db/test.sqlite3 production: <<: *default database: db/production.sqlite3
YAMLの書式
- 「キー: 値」で記述される
- キーに対して複数の設定をする場合、キーを宣言した後にインデントして記述する
- &文字列は変数
- 定義した変数を引用するには
<<: *default(変数)
のように書く- この場合、
&default
で定義した設定を読み込んでいる
- この場合、
Railsには動作する環境が3つ用意されている。
- 開発環境:開発時に使用
- テスト環境:自動テスト実行時に使用
- 本番環境:開発済みのRailsアプリを本番サーバ上で稼働する際に使用
動作環境を変える場合、rails s
コマンドの際に-e
オプションをつける。
例:本番環境rails s -e production
デフォルトの設定
default: &default adapter: sqlite3 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> timeout: 5000
設定 | 内容 |
---|---|
adapter | DB接続に使用するgem |
pool | コネクションプーリングで使用するコネクションの上限数 |
timeout | DBからの応答待ちの上限時間(ミリ秒) |
コネクションプーリングとは、データベースの接続をアクセスの度ごとに一からやり直すのではなく、アプリ側で保持して使い回す仕組み。これによってサーバーへの負荷を減らすことができる。
<%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
これは、RAILS_MAX_THREADSという環境変数が指定されていたらその値を、そうでなければ5という意味。 RAILS_MAX_THREADSは、Railsで起動するWebサーバーであるPumaのスレッド数を表す。
スレッドとは、プログラムの処理の流れのこと。Railsが標準採用するWebサーバーのPumaは、複数のスレッド(マルチスレッド)で動く。大量のアクセスを効率的にさばける。
開発、テスト、本番環境の設定
development: <<: *default database: db/development.sqlite3 # Warning: The database defined as "test" will be erased and # re-generated from your development database when you run "rake". # Do not set this db to the same as development or production. test: <<: *default database: db/test.sqlite3 production: <<: *default database: db/production.sqlite3
<<: *default
でデフォルトの設定を引き継いでいる。
設定 | 内容 |
---|---|
database | DB名 |