本番環境で Rails アプリを起動するときに SECRET_KEY_BASE 環境変数はどこにありますか
概要
Rails 4 In Action Book には、他のセットアップを行った後、Rails アプリを本番モード (Web ブリックを使用) で起動するための最終セットアップは、ターミナルで次のコマンドを入力することであると記載されています。
SECRET_KEY_BASE='rake secret' rails s -e production
SECRET_KEY_BASEの環境変数がどこに保存されているかを確認しようとしています。
/app/config/secrets.yml 内では、secret_key_base 変数が環境変数であることが示されています。
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
しかし、.bashrc と .bash_profile 内を調べたところ、変数 SECRET_KEY_BASE がありませんでした。
最終的に知りたいのは、環境変数とその値はどこにあるのかということです。 Rails アプリのどこかに保存されていますか?このアプリを github にプッシュする場合、セキュリティ目的ではないことを願います。アプリではなくコンピューターシステムのどこかに保存されていると思います。別の端末ウィンドウ内で echo を実行しますが、何も返されません。
不足している部分を理解するのを手伝ってくれてありがとう。
補足: この質問は知っていますが、質問はそれほど詳細ではなく、回答も提供されていません。
解決策
これを実行すると:
SECRET_KEY_BASE='rake secret' rails s -e production
実際には、将来のために秘密鍵を「保存」しているわけではありません。 1 回限りで定義します。 Ruby コマンドを実行するたびに、一時的な環境変数を設定できます。
# from shell
KEY="VAL" OTHER_KEY=OTHER_VAL ruby my_command.rb
# from the ruby script
puts ENV["KEY"] # => "VAL"
puts ENV["OTHER_KEY"] # => "OTHER_VAL"
環境変数を永続化するには、いくつかのオプションがあります。これらをソース コードにハードコーディングすることもできますが、コードを Github にプッシュすると誰でも見ることができるため、これはおそらく良い考えではありません。とにかく、環境変数をシステム固有に保持できるのは、環境変数の重要な点のようなものです。
オプションA
.bashrc または .bash_profile で設定できます。
まず、rake シークレットの結果 (ランダムな文字列になります) を取得し、シェル変数を設定します。
KEY=`rake secret` # uses backticks to get command result
次に、bashrc にエクスポートする行を追加します。
echo -e "export SECRET_KEY_BASE=$KEY" >> ~/.bashrc
オプション B
これは私がお勧めする方法です。dotenv または figaro を使用すると、アプリ固有の方法で、つまり bashrc を乱雑にすることなく環境変数を管理できます。
たとえば、dotenv を使用すると、次の内容を含む .env ファイルを作成します。
# change this to the result of rake secret
SECRET_KEY_BASE=j3e2dd293d
これは、gitignore に追加することでソース管理から除外されます。
次に、Ruby アプリで呼び出します
require 'dotenv'
Dotenv.load
ENV[“SECRET_KEY_BASE”] が設定されます。
必要に応じて、どの環境変数を定義する必要があるかを示す .env.example ファイル (ソース管理に含まれています) を作成できます。次に、アプリのクローンを作成するときに、 mv .env.example .env を実行して、.env をカスタマイズできます。