私はFacebookのアプリケーションをRailsで作成していて、Herokuでホストしています。Git - PushしてDev Configを展開して削除するには
ヘロクでは、レポをサーバーにプッシュすることで展開します。
私がこれを行うとき、私は自動的にいくつかのdevの設定(例えば、Facebookの秘密)を本番設定に変更したいと思います。
これを行うにはどうすればよいですか?ジットフック?
私はFacebookのアプリケーションをRailsで作成していて、Herokuでホストしています。Git - PushしてDev Configを展開して削除するには
ヘロクでは、レポをサーバーにプッシュすることで展開します。
私がこれを行うとき、私は自動的にいくつかのdevの設定(例えば、Facebookの秘密)を本番設定に変更したいと思います。
これを行うにはどうすればよいですか?ジットフック?
Gitフックや他の方法を使用してデプロイ時に実際のコードを変更したくない場合は、この状況を処理するための共通の方法がいくつかあります。
環境ベースの設定
本番があなたのリポジトリに構成設定値持つ気にしない場合は、環境に基づいて、それらを作ることができます。
# config/application.yml
default:
facebook:
app_id: app_id_for_dev_and_test
app_secret: app_secret_for_dev_and_test
api_key: api_key_for_dev_and_test
production:
facebook:
app_id: app_id_for_production
app_secret: app_secret_for_production
api_key: api_key_for_production
# config/initializers/app_config.rb
require 'yaml'
yaml_data = YAML::load(ERB.new(IO.read(File.join(Rails.root, 'config', 'application.yml'))).result)
config = yaml_data["default"]
begin
config.merge! yaml_data[Rails.env]
rescue TypeError
# nothing specified for this environment; do nothing
end
APP_CONFIG = HashWithIndifferentAccess.new(config)
は今、あなたは、例えば、APP_CONFIG[:facebook][:app_id]
のために、を介してデータにアクセスすることができ、その値は自動的にアプリケーションがで起動された環境に基づいて異なるだろう
環境:私は時々、このようなものを使用します。変数ベースの設定
もう1つのオプションは、環境変数を使用して本番データを指定することです。 Herokuはconfig varsでこれを行うことができます。
facebook_app_id = ENV['FB_APP_ID'] || 'some default value'
がコンソールに入力して、Herokuの上の生産コンフィグVARを作成します:
(多分、オプションのデフォルト値を使用して)環境に基づいた値を使用するようにコードを設定heroku config:add FB_APP_ID=the_fb_app_id_to_use
今ENV['FB_APP_ID']
生産上のthe_fb_app_id_to_use
(Herokuの)、および0でありますの開発とテスト。
上記のHerokuのドキュメントには、この戦略に関するさらに詳しい情報があります。
あなたは、チェックアウト上で自動的に実行「smudge
」スクリプトに基づいて、content filterのアイデアを探索することができます。
あなたは宣言します:その実行環境を認識し、生成することができ
smudge
スクリプトを値ファイルからの必要な(バージョン管理されていない)最終ファイルまたはGitの外部の他のソースからの(機密情報のための) po。
今のところ、これは私が行った解決策です。それは素晴らしい作品です。ありがとうございました。また、HashWithIndifferentAccessの説明は、あなたがそれを見たことがないなら面白いです:http://as.rubyonrails.org/classes/HashWithIndifferentAccess.html – andrewheins