前置き、概要説明
ことの始まりはRails4.1からconfig/secrets.yml
に下記のような環境変数が使われていたことです。
development:
secret_key_base: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
test:
secret_key_base: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
本番サーバー向け(production)のsecret_key_base
プロパティが環境変数を読んでいて、デプロイ後に本番サーバーを確認したら画面が真っ白。ローカル開発環境なら~/.zshrc
にexport SECRET_KEY_BASE=xxxxxxxxxx
で良さそうですが、本番サーバーはプロジェクト(サービス)毎に環境変数を隔離しておきたいです。
そこで今回はdotenv-rails
というgemライブラリを用いて解決しました。
インストールおよび設定
本記事はBundlerを用いてRails環境を既に構築してある前提です。Bundler環境のインストール方法はこちら。
1.dotenvインストール
gemライブラリdotenv-railsをインストールします。bundlerを用いるのでGemfileにdotenv-rails
を追記します。
gem 'dotenv-rails'
bundleコマンドでインストールします。
$ bundle install
2.環境変数を設定
次に環境変数を設定します。本記事はconfig/secrets.yml
が原因で画面が真っ白になる問題の解決をサブ目標としているので、SECRET_KEY_BASEの生成も記述します。
$ bundle exec rake secret
上記コマンドでSECRET_KEY_BASEが生成されます。この文字列をコピーして設定ファイルに環境変数にして代入してあげます。dotenvの設定ファイルはプロジェクト配下の.envというファイルです。
SECRET_KEY_BASE="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
これで、WEBサーバー(サービス)を再起動してあげれば、恐らく環境変数が取得出来ているはずです。SECRET_KEY_BASEに限らず、データベース向け設定などを環境変数として持たせておけば色々と便利かと思います。