【解決】dotenvとridgepoleを組み合わせて使う際に、ridgepole実行時に、dotenvが展開されずエラーが起きる【rails】
起きたこと
rails のプロジェクトを作成し、databaseのマイグレーション周りに ridgepole を使おうとして以下のようなエラーが出た。
passwordなどの環境設定はきちんと渡しているのになんでエラーなのかなぁとハマっていた。
$ bundle exec dotenv ridgepole -c config/database.yml -E development --apply -f db/Schemafile [ERROR] Access denied for user 'mozy'@'localhost' (using password: NO) /Users/mozy/hoge/vendor/bundle/ruby/2.5.0/gems/mysql2-0.5.1/lib/mysql2/client.rb:90:in `connect'
環境変数を以下のようにdotenvにまとめていた。
.env
DATABASE_HOST=127.0.0.1 DATABASE_PORT=3000 DATABASE_USERNAME=root DATABASE_PASSWORD=pass DATABASE_NAME=database_dev
解決策
ridgepoleの実行時には、dotenvが展開されていないようでエラーが起きていた模様。
以下のように、dotenv -f ".env"
というように即時展開するオプションがあったのでそれを使うことで.envの設定を渡すことができた。
一件落着。
$ bundle exec dotenv -f ".env" ridgepole -c config/database.yml -E development --apply -f db/Schemafile
参考
GitHub - bkeepers/dotenv: A Ruby gem to load environment variables from `.env`.