如果我将API密钥存储到 secrets.yml ,有人可以帮助我了解如何检索API密钥吗?
如果我有某种谷歌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
保存在heroku中并保存在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 :(得分:3)
ENV["YT_KEY"]
引用您必须使用environment variable设置的'YT_KEY'Heroku config 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 :(得分: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"]
或some_key
添加ENV["SOME_KEY"]
至secret.yml
。
通常建议您不要将自定义密钥放在app_keys.yml
中,而是创建另一个文件$("#needColor tr:even").css("background-color", "yellow");
并将所有密钥放在那里。
答案 2 :(得分: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"]
如果在env
中使用这些html.erb
密钥,则需要将其与<%= ... %>