😇

Rails.envを出力して$RAILS_ENVと表示された際に確認すること

2020/10/14に公開

はじめに

タイトルの通りなのですが、とてもしょうもないミスをしてしまったので自戒を込めて共有します。
(これで二週間無駄にしました)

結論

コマンドのオプションに$RAILS_ENVと入れてもそこでstaging等の文字列に展開される訳ではない

× bundle exec unicorn_rails -c /app_name/config/unicorn.rb -E $RAILS_ENV
bundle exec unicorn_rails -c /app_name/config/unicorn.rb

本題

Railsでstaging環境の構築を行なっていた際、unicorn_railsが起動できず、

bundler: failed to load command: unicorn_rails (/usr/local/bundle/bin/unicorn_rails)

このエラーが出て内心「???」となっていました。
Gemfileにもstagingでunicornを使う表記にしていましたし、RAILS_ENVという環境変数にもstagingと入れていましたし。

もしかして環境が認識されてないのかもしれないと思い、

puts Rails.env
puts Rails.env.staging?
puts Rails.env.production?
puts Rails.env.test?
puts Rails.env.development?

というコードを設定ファイルに追加してデバッグしました。すると、

$RAILS_ENV
false
false
false
false

という驚きの結果が出たのです。

どの環境でもないというのも驚きでしたが、Rails.envが$RAILS_ENVとなっていることに一番驚きました。

そこで、実行していたunicornの起動コマンドを見てミスに気づきました。
実行していたコマンドが以下になります(修正前)

bundle exec unicorn_rails -c /app_name/config/unicorn.rb -E $RAILS_ENV

(-DがないのはECSで起動しており標準出力にエラーを出す必要がある為です)

そうです。まさかのコマンドでRAILS_ENVを$RAILS_ENVと自分で設定してしまっていたのです...

気づいた時はめちゃくちゃショックでした。
そりゃそうなるわ...と。。

デバッグの際、

bundle exec unicorn_rails -c /app_name/config/unicorn.rb -E staging

として動くのを確認していたのでなおさら「そこで気づけよ自分。。。」感が溢れてショックでした。

ここまで書いたので言うまでもないかもしれませんが修正後のコマンドも載せておきます

bundle exec unicorn_rails -c /app_name/config/unicorn.rb

これだけでよかったのです。
冷静に考えれば、"環境"変数という名前なので、変更がある場合以外はわざわざオプションで指定する必要もなかったのです。

同じ問題を抱えている人の役に立てれば幸いです。

最後までお読みいただき、ありがとうございました。

Discussion