概要
他のアプリケーションのシークレットやトークンをコードと分離し管理するために、環境変数に設定するのが一般的なやり方です。
ココではRailsアプリケーションに置いて、環境変数を設定する方法をお伝えします。
全体の設計
Custom Chefは対象のCookbookをEngine Yard Cloud管理サーバに登録されます。
これはeyコマンドからダウンロードできるため、追加、変更が必要な場合は、こちらからダウンロードし、編集、再度アップロードします。
Applicationサーバ、DBサーバ、Utilityサーバスケール時にも同じ設定が反映されます。
準備
1. ローカル環境にey コマンドをインストールしておく
https://support.cloud.engineyard.com/entries/25068712?locale=67
手順
1. custom chefを用いて、必要な環境変数を `/data/#{app_name}/shared/config/env.custom` に設定する
2. Nginxからのアクセスにて、設定した変数が反映されます(Rails consoleからはこちらのやり方では反映されません)
3. dotenv gemをつかって、コマンドライン、runnerなどからも参照できるようにします
1. Custom Chefを使う
custom chefの仕組みを使って、環境変数を設定します。環境変数は `/data/#{app_name}/shared/config/env.custom` に書きだされ、nginxにて設定されます。
a. custom chefのテンプレートを次のリポジトリからダウンロードしてきます
https://support.cloud.engineyard.com/entries/25068712?locale=67
b. cookbooks/main/recipes/default.rb から、 `include_recipe "env_vars"` をコメントインします
https://github.com/engineyard/ey-cloud-recipes/blob/master/cookbooks/main/recipes/default.rb#L84
* phpの場合 cookbooks/env_bars/templates/default/env.custom.erb を次のように変更してください
<% @env_vars.each do |key, value| %>
env[<%= key.upcase %>] = <%= value %>
<% end %>
c. cookbooks/env_vars/attributes/env_vars.rb に設定したい環境変数を設定します
https://github.com/engineyard/ey-cloud-recipes/blob/master/cookbooks/env_vars/attributes/env_vars.rb
サンプルで設定してある変数は削除して構いません
d. eyコマンドを使って、cookbookのuploadと、apply(適応) を行います
$ey recipes upload -e #{環境名}
$ey recipes apply -e #{環境名}
Nginxからのアクセス(webアクセス)時に、envに設定されるようになります
dotenvでの読み込み
rake taskやrunnerなどコマンドラインから使うときは、rubygemsのdotenvを使って読み込むことができます。
Dotenv.load('/data/#{app_name}/shared/config/
env.custom')
たとえば、config/に以下のようにロードを追加することで、assets pipline やrunnerで使うことが可能です。
```
env_file_path = "/data/Chart/shared/config/env.custom"
if File.exists?(env_file_path)
Dotenv.load(env_file_path)
end
```
YAML をつかう
Engine Yardでは、一つの環境(クラスター)に複数のアプリを乗せることができます。
この場合、グローバルな環境変数は適切な解法ではありません。次のリンクにYAMLを使った、設定方法もございます。
コメント
サインインしてコメントを残してください。