不具合
dotenvという、プロジェクトディレクトリの.envファイルに設定した内容を環境変数として読み込んでくれるgemを使っているのですが、.envの設定を変更しても想定した通りに挙動が変わらなかったためENV変数の中身を見てみると、.envを書き換えたにも関わらず何故か環境変数は元のまま書き換わっていない!ということがありました。
.envで
HOGE=0
HOGEを1に書き換えたのに
HOGE=1
なぜかHOGEは0のまま
[1] pry(main)> ENV['HOGE']
=> "0"
railsのサーバーは再起動させているはずだし、なんでだろうなんでだろう(古い)と隣の席の方に指示を仰いだところ、spring stop
すると反映されるかもしれないとのことでしたので、試してみたところ無事環境変数が書き換わりました。よかったよかった。
環境変数の変更が反映されないときはspring stopを試す
SpringとはRails4.1から標準で付属するようになったアプリケーションプリローダーで、Railsアプリケーションをバックグラウンドでプリロードしておくことによりrailsコマンドの起動時間が短縮されるというものです。rails server
やrails console
などのコマンドを実行すると同時に起動します。
このSpring、どうやらうまくリロードされていないのか、環境変数をキャッシュしてしまっているのか、環境変数の書き換えが反映されない原因となることが稀によくある(やや古い)ようです。
https://twitter.com/search?q=spring%20dotenv&src=typd
https://twitter.com/search?q=spring%20%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0&src=typd
また今回のケースとは異なりますが、Springのロード処理の失敗が原因でrailsコマンドが動かなくなってしまうこともあるようです。
Rail4で困ったらSpringを停止せよ
Rails コマンドが動かなくなった場合の対処
railsコマンドが固まったんでspringをstopしたら動くようになった
railsのコマンドが動かない時はspringを(stop|kill)してみよう
このようなケースに遭遇した時は、spring stop
を試してみる、と覚えておくとよさそうです。