RubyonRailsで最初のFacebookアプリの作成が完了しました。私のコントローラーには、
@oauth = Koala::Facebook::OAuth.new(app_id,secret_id,callback_url) (Replaced with temp values)
これらの値をコントローラーに含めても大丈夫ですか、それともアプリの別の場所に非表示にする必要がありますか?それらを変数に割り当てますか?
ここでの正しいプログラミングの習慣は何ですか?
RubyonRailsで最初のFacebookアプリの作成が完了しました。私のコントローラーには、
@oauth = Koala::Facebook::OAuth.new(app_id,secret_id,callback_url) (Replaced with temp values)
これらの値をコントローラーに含めても大丈夫ですか、それともアプリの別の場所に非表示にする必要がありますか?それらを変数に割り当てますか?
ここでの正しいプログラミングの習慣は何ですか?
実際には、バージョン管理システムにこれらの値を記録することを避けたいと思うことになります。
私が通常採用しているアプローチは次のとおりです。
config/application.rb
アプリケーションクラス定義内のに以下を追加します
# Loads app config from /config/env_vars.yml
require 'yaml'
rails_root = Rails.root || File.dirname(__FILE__) + '/../..'
config = YAML.load_file(rails_root.to_s + '/config/env_vars.yml')
if config.key?(Rails.env) && config[Rails.env].is_a?(Hash)
config[Rails.env].each do |key, value|
ENV[key] = value.to_s
end
end
でファイルを作成しconfig/
、env_vars.yml
以下を含めます
development:
FB_APP_ID: APP_ID_HERE
FB_APP_SECRET: APP_SECRET_HERE
APP_ID_HERE
とAPP_SECRET_HERE
あなたのAPIの詳細を置き換えます。このファイルに必要な数の他の値(つまり、Twitterキーなど)を追加し、環境ごとに繰り返します(たとえば、開発、ステージング、および本番用に異なるFBアプリがある場合)。ENV['FB_APP_ID']
これらは、コントローラー内でなどによって参照できます。
このアプローチを使用する場合は、env_vars.ymlをVCSから除外できます。つまり、アプリで利用できるようにしながら、これらの値をリポジトリに実際にコミットしていません。
最後に、Herokuを使用する場合、これらの値を環境変数として割り当てるのはアプリごとに簡単であり(つまり、詳細heroku config:set FB_APP_ID=234234324234
についてはhttps://devcenter.heroku.com/articles/config-varsを参照)、これらをコミットする必要がありません。 Herokuにプッシュする前に、リポジトリに値を設定します。
gitから除外env_vars.yml
すると、このファイルはHerokuにプッシュされたときに利用できなくなり、起動時にアプリがクラッシュします。最も簡単な解決策は、追加されたコードconfig/application.rb
を次のように変更することです。
# Loads app config from /config/env_vars.yml
unless Rails.env == 'production'
require 'yaml'
rails_root = Rails.root || File.dirname(__FILE__) + '/../..'
config = YAML.load_file(rails_root.to_s + "/config/env_vars.yml")
if config.key?(Rails.env) && config[Rails.env].is_a?(Hash)
config[Rails.env].each do |key, value|
ENV[key] = value.to_s
end
end
end
条件付きでラップすることにより、 (Herokuのデフォルト環境)でunless Rails.env == 'production'
実行されている場合はスキップされます。production
Herokuに複数の環境(、、など)を使用している場合staging
、uat
これを次のproduction
ように変更できます。
unless %w(staging uat production).include?(Rails.env)
これがコミットされてHerokuにプッシュされると、ファイルは検索されなくなり、Herokutoolbeltコマンドenv_vars.yml
を使用してアプリごとに構成変数を自由に設定できるようになります。heroku config:set
この記事を見てください:http://railsapps.github.com/rails-environment-variables.html
私はfigarogemを使用することを好みます:https ://github.com/laserlemon/figaro