概要
環境変数のDATABASE_URLを使うとユーザー名やパスワードなど複数の項目を1つの環境変数で指定出来て便利です。
しかしハマりポイントもあるのでDATABASE_URLを使う際の注意点を紹介します。
なお本番環境にはあまり関係ない話です。
投稿時点でのrailsのバージョンは6.0.3.2です。
優先順位について
database設定の優先順位は下記の通りです。
- database.ymlのurl項目
- 環境変数DATABASE_URL
- database.yml
参考url
https://railsguides.jp/configuring.html#%E6%8E%A5%E7%B6%9A%E8%A8%AD%E5%AE%9A
DATABASE_URLが使われるのは現在のRAILS_ENVだけ
DATABASE_URLが使われるのは現在のRAILS_ENVだけのようです。
しかしRAILS_ENVがdevelopmentの場合はtestに対してもtaskが実行されます。
そのためdevelopmentで db:create
を行うとtestに対しても db:create
が実行されますがtestではDATABASE_URLを参照されないため失敗するなどといった問題が発生します。
回避策としてはdatabase.ymlのurlでDATABASE_URLを使うように明示的に指定する方法があります。
ただしこれも今後は注意が必要そうです。
今後の注意点
上記の問題修正のためにDATABASE_URLが設定されていた場合はRAILS_ENVがdevelopmentでもtestに対してtaskを実行しない修正が行われました。
すでにmasterにはマージ済みでおそらく6.1でリリースされると思われます。
現在developmentでDATABASE_URLを使っている場合はdevelopmentとtestでdatabaseのズレが発生するようになることが予想されます。
今後はtest環境で別途手動でtaskを実行するのを忘れない、もしくはそもそもdevelopmentではDATABASE_URLを使わないなどの対応が必要そうです。