更新履歴
- 2019/10/29 direnvでの環境変数指定方法の誤り修正
問題と原因
railsのアプリケーションを作る際に、rails db
を実行したら以下のエラーが発生しました。エラー内容は、パスワードが無いので、rootでmysqlに接続できませんという内容です。
$ rails db:migrate
rails aborted!
Mysql2::Error: Access denied for user 'root'@'localhost' (using password: NO)
対策
railsにおけるDBの設定ファイルである、database.ymlに、以下のように自分の環境におけるパスワードを設定してあげればOKです。
/config/database.yml
default: &default
username: USERNAME
password: PASSWORD
direnvを使って、環境変数の設定
上述の設定で動作はするのですが、パスワード等の公開したくない情報をコードに直書きはよろしくないです。なので、それらの情報を環境変数へ定義します。
自分は、direnvを使って環境変数を定義しています。direnvは、各ディレクトリ毎に環境変数を定義することができるので、プロジェクト毎に環境変数を管理することができて、とても便利です。
https://github.com/direnv/direnv
以下、環境変数の設定
/.envrc
export DB_USERNAME: USERNAME
export DB_PASSWORD: PASSWORD
そして、secret.ymlへ設定した情報の呼び出し方法は、以下の通りです。
/config/database.yml
default: &default
username: ENV['DB_USERNAME']
password: ENV['DB_PASSWORD']