2016-07-02 4 views
4

APIキーを取得する方法を教えてもらえますか?secrets.ymlRuby on Rails、secrets.ymlからAPIキーを取得する

私はGoogleのAPIキー'yt_key'のいくつかの種類がある場合:私はちょうど例を以下のよ

secrets.yml

development: 
    secret_key_base: 390257802398523094820 #some key 
    yt_key: A423092389042430 #some key 

test: 
    secret_key_base: 43208947502938530298525#some key 
    yt_key: A423092389042430 #some key 

production: 
    secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> 
    yt_key: <%= ENV["YT_KEY"] %> 

を、これは私が右のそれを設定する方法をありますか?

これを本番に公開すると、A423092389042430が英雄に保存され、YT_KEYの下に正しく保存されますか?

しかし、開発には、私はそれをデータを取得するには、このようにします:

/config/application.rb

Yt.configure do |config| 
    config.api_key = '<%= ENV["YT_KEY"] %>' 
end 

か、これはクラスであるべきで:

module Sample 
    class Application < Rails::Application 

    Yt.configure do |config| 
     config.api_key = '<%= ENV["YT_KEY"] %>' 
    end 

    config.active_record.raise_in_transactional_callbacks = true 
    end 
end 

設定を間違って設定しましたか?

+0

'Yt.configure'のようなサウンドは' initializers/yt.rb'になければなりません。そして、 '<%= %>'をルビファイルに入れる必要はありません。 –

答えて

2

ENV["YT_KEY"]は、Heroku config variableで設定する必要がある 'YT_KEY' environment variableを参照しています。あなたのアプリで

、あなたはこのようなあなたの秘密にアクセスすることができます。

Rails.application.secrets.key_name 

あなたが唯一の生産の環境変数として「YT_KEY」を保存しているので、あなたがそうのようYtを設定する必要があります

(あなたがapp/initializers/yt.rbにある初期化ファイルでこれを行うことができます)

Yt.configure do |config| 
    config.api_key = Rails.application.secrets.yt_key 
end 

そうすれば、正しいキーはそれぞれの環境に設定されます。

環境ごとに異なるキーを使用することをお勧めします。そのため、運用環境に別のキーを取得する必要があります。また、秘密の運用環境キーをコードに格納しないようにする必要があります。そのため、プロダクションキーにENV変数を使用するのが一般的です。

説明が必要な場合はお知らせください。

1

このようにすれば、私たちは長い間この方法をやっており、私たちのために非常にうまく作業しています。これは良いコンベンションでもあります。

secrets.yml

development: 
    secret_key_base: 390257802398523094820 #some key 
    yt_key: A423092389042430 #some key 

test: 
    secret_key_base: 43208947502938530298525#some key 
    yt_key: A423092389042430 #some key 

production: 
    secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> 
    yt_key: <%= ENV["YT_KEY"] %> 

あなたapplication.rbファイル

config_files = ['secrets.yml'] 

    config_files.each do |file_name| 
     file_path = File.join(Rails.root, 'config', file_name) 
     config_keys = HashWithIndifferentAccess.new(YAML::load(IO.read(file_path)))[Rails.env] 
     config_keys.each do |k,v| 
     ENV[k.upcase] ||= v 
     end 
    end 

、今あなたがyt_keyこの方法ENV["YT_KEY"]またはあなたがENV["SOME_KEY"]some_keyのように追加し、他のキーにアクセスすることができますこれらの行を追加します。

secret.ymlにカスタムキーを入れずに、app_keys.ymlのような別のファイルを作成し、そこにすべてのキーを置くことをお勧めします。

0

Figaro gemを使用することもできます。

インストールすると、config/application.ymlファイルが作成されます。その中にあなたのAPIキー等:

SENDGRID_USERNAME: a-name 
SENDGRID_PASSWORD: password 

は今、どこでもあなたの.rbファイルで、あなたはVARSを使用して、それを参照することができます保存することができます:

# Noticed how I keep my vars uppercase throughout. 

ENV["SENDGRID_USERNAME"] 
ENV["SENDGRID_PASSWORD"] 

# Production vars go below the `production` line 

production: 
    ENV["MY_PRODUCTION_VAR"] 

、あなたのhtml.erbの中にあるものをenvキーを使用する場合は、 <%= ... %>

関連する問題