mozyのかきおき

mozyの読書感想文や思考置き場

【解決】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`.

GitHub - winebarrel/ridgepole: Ridgepole is a tool to manage DB schema. It defines DB schema using Rails DSL, and updates DB schema according to DSL. (like Chef/Puppet)