Rubyと筋肉とギターとわたし

筋トレが仕事です

【Rails】helperで環境変数を使いたい場合

どうもてぃです。

備忘録として残しておきます。

環境変数を設定し、クライアント側で表示するものを変えたいとPMから要望が合ったので、その要件を満たすために実装しました。

実装したとはいっても、そんな大したことはやっていないですが。

実行環境

helperでは環境変数を読み込んでいない

まず前提として、helperでは環境変数は読み込めていないです。

今回、gemの dotenv-rails を使っていますが、設定していた環境変数をhelperやviewで呼び出したのですが、 nil が返ってきました。

module UsersHelper
  def display_user
    current_user.name if ENV['IS_USER_DISPLAY_DEFAULT'] == 'true'
    # => ENV['IS_USER_DISPLAY_DEFAULT']がnilで返ってくる
  end
end

こんな感じ。

.env ファイルに IS_USER_DISPLAY_DEFAULT を設定している状態です。

解決策

至って簡単。

helperのメソッド内で読み込み直せば良い。

module UsersHelper
  def display_user
    Dotenv.overload
    current_user.name if ENV['IS_USER_DISPLAY_DEFAULT'] == 'true'
  end
end

Dotenv.load では環境変数を変更した際に再読み込みされないようなので、 Dotenv.overloadで対応。

これで面倒なクライアントさんの要件を満たすことが出来ました。

めでたしめでたし。