puma-devでdirenvの使い方

puma-devdirenvを使っていたら、環境変数が読み込めてないので調べてみた。

背景

puma-devを使って開発を行っていて、Twitter連携をしていたら、400 Bad Requestエラーが出た。どうやら環境変数で設定してあるAPIのキーが読み込めていない様子。

direnvを使っていて、rails sで実行している時は動いているので、おかしいなぁと調べて、puma-devは以下の3種類の外部ファイル形式の環境変数の読み込みしか対応していなかったようだ。

.envはdotenvで利用されるファイル、残りの二つはpowなどで利用できたファイルである。

解決方法を調べてみると、同じような質問がpuma-devのissuesにあった。 direnvの方にdotenvのファイルを読む仕組みがあるのでそれを使えということらしい。

# .envrc
dotenv
# .env
export TWITTER_API_KEY=...
export TWITTER_API_SECRET=...

少しハマった点としては、.env通常のdotenvの記述方法ではなくて、頭にexportを付けてbashとして実行する必要があった。

まとめ

というわけで、direnvとpuma-devの併用は以下のようにすればOK。

その他メモ

.gitignoreには、.envだけ書いておき、.env.sampleにキーだけを書いたファイルをコミットする。dotenvと書かれた.envrcはコミットして良い。