Ruby
Rails
Heroku

HerokuにRailsアプリをデプロイした時のdatabase.ymlの置き換えについて

More than 1 year has passed since last update.

Ruby on Rails Tutorial 第4版をしていて、pushしたdatabase.ymlの内容と実際の動作が異なっていたのでメモします。


database.ymlにはpgの設定がないのにHerokuで正常動作する

Tutorialに従っていると、database.ymlの中身は以下の様になっているはず。


database.yml

default: &default

adapter: sqlite3
pool: 5
timeout: 5000

(中略)

production:
<<: *default
database: db/production.sqlite3


ちなみに、Gemfileはこんな感じ。


Gemfile

group :production do

gem 'pg', '0.18.4'
end

ちなみに、デプロイしたHerokuではpgで正しく動作しています。なのにdatabase.ymlにはsqlite3の設定しかありません。ふしぎです。


HerokuのRubySupportの項にちゃんと説明がありました

要はherokuにアップしたdatabase.ymlの内容はすべて無視され、上書きされるということですね。

Heroku::RubySupportによると、Rails4.1以上の場合は、以下のようにdatabase.ymlを作成/変更するようです。


  • database.ymlがない場合は、database.ymlを作成する

  • database.ymlがある場合は、database.ymlを置き換える

  • 上のdatabase.ymlはHeroku環境変数のDATABASE_URLの内容をパースして動的に作成される