Ruby on Rails,从 secrets.yml 中检索 API 密钥

hel*_*llo 4 ruby ruby-on-rails ruby-on-rails-4

如果我将 API 密钥存储到secrets.yml 中,有人可以帮助我了解如何检索 API 密钥吗?

如果我有某种谷歌 API 密钥'yt_key'

秘密.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"] %>
Run Code Online (Sandbox Code Playgroud)

我只是按照示例进行操作,这就是我的设置方式吗?

因此,如果我将其发布到生产环境中,我会将其保存A423092389042430在 heroku 和 under 中YT_KEY,对吗?

但是在开发中,我会不会这样做来检索数据:

/config/application.rb

Yt.configure do |config|
  config.api_key = '<%= ENV["YT_KEY"] %>'
end
Run Code Online (Sandbox Code Playgroud)

或者这应该在课堂上:

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
Run Code Online (Sandbox Code Playgroud)

还是我设置错了?

Eri*_*old 5

ENV["YT_KEY"]引用 'YT_KEY'环境变量,您必须使用Heroku 配置变量设置该变量

在您的应用程序中,您可以像这样访问您的机密:

Rails.application.secrets.key_name
Run Code Online (Sandbox Code Playgroud)

由于您仅在生产中将“YT_KEY”存储为环境变量,因此您应该像这样配置 Yt:

(您可以在位于 的初始化文件中执行此操作app/initializers/yt.rb

Yt.configure do |config|
  config.api_key = Rails.application.secrets.yt_key
end
Run Code Online (Sandbox Code Playgroud)

这样,将在每个环境中设置正确的密钥。

为每个环境使用不同的密钥是一种很好的做法,因此应该为您的生产环境获取另一个密钥。此外,您应该避免在代码中存储秘密的生产环境密钥。这就是为什么将 ENV 变量用于生产密钥很常见的原因。

如果您需要任何说明,请告诉我!