如何在Ruby控制器中加载凭据而不将其存储在文件中?

rem*_*nny 2 ruby security rubygems ruby-on-rails sinatra

我正在使用Sinatra开发Twilio应用程序.由于我没有太多使用Ruby的经验(但我很兴奋地学习),我在将凭据与文件分离时遇到了问题.我想将文件上传到存储库,但我希望将敏感凭据保存在可导入的单独文件中.

该文件目前由以下部分组成:

require 'rubygems'
require 'twilio-ruby'

account_sid = "xxxxxx"
auth_token = "xxxxx"
client = Twilio::REST::Client.new account_sid, auth_token

from = "+12341231234"

friends = {
  "+1231231234" => "Lenny"
}
friends.each do |key, value|
  client.account.sms.messages.create(
    :from => from,
    :to => key,
    :body => "Hey #{value}, Monkey party at 6PM. Bring Bananas!"
  )
  puts "Sent message to.#{value}"
end
Run Code Online (Sandbox Code Playgroud)

如何正确加载account_sidauth_token行到单独的文件?存储此类凭据的最佳做法是什么?

Gaz*_*ler 6

两种常见做法是:

1)将变量存储为系统中的环境变量并使用它们进行访问 ENV

account_sid = ENV["TWILIO_ACCOUNT_SID"]
auth_token = ENV["TWILIO_AUTH_TOKEN"]
client = Twilio::REST::Client.new account_sid, auth_token
Run Code Online (Sandbox Code Playgroud)

2)另一种方法是将它们存储在服务器上的YAML文件中,然后在部署应用程序时,将此文件符号链接到存储库中的文件.这个文件应该在你的文件中.gitgnore

#config.yml

twilio:
  account_sid: "xxxxx"
  auth_token: "xxxxx"
Run Code Online (Sandbox Code Playgroud)

然后在你的申请中

require 'yaml'
config = YAML.load_file("config.yml")
account_sid = config[:twilio][:account_sid]
auth_token = config[:twilio][:auth_token]
Run Code Online (Sandbox Code Playgroud)

还有一些用于配置管理的宝石,我个人使用的唯一一个是figaro,但它是特定于rails的.