Ruby on rails 如何在Rails中存储第三方服务的凭据

Ruby on rails 如何在Rails中存储第三方服务的凭据,ruby-on-rails,security,capistrano,Ruby On Rails,Security,Capistrano,我正在通过SendGrid为rails应用程序发送的邮件设置重定向。 然而,我并不真正满意我被告知存储凭证的方式 按照规定,他们建议覆盖config/environment.rb文件中的ActionMailers默认值。我发现我的前任创建了一个initializers/smtp.rb文件,他在其中定义了以前的设置,但是通过发现这个文件,我发现了smtp密码 如果我修改这些文件中的任何一个,有权访问git存储库的人将有权访问凭据(包括与我们合作的前端和后端自由职业者) 我在考虑创建一个文件,该文件

我正在通过SendGrid为rails应用程序发送的邮件设置重定向。 然而,我并不真正满意我被告知存储凭证的方式

按照规定,他们建议覆盖config/environment.rb文件中的ActionMailers默认值。我发现我的前任创建了一个initializers/smtp.rb文件,他在其中定义了以前的设置,但是通过发现这个文件,我发现了smtp密码

如果我修改这些文件中的任何一个,有权访问git存储库的人将有权访问凭据(包括与我们合作的前端和后端自由职业者)

我在考虑创建一个文件,该文件将保留在服务器的共享文件夹(如database.yml文件)中,并且由于capistrano,每次部署时都会与应用程序进行符号链接

你觉得怎么样?只需将此初始值设定项/smtp.rb移动到服务器的共享文件夹,并在部署时将其符号链接即可吗

我的建议(我所看到的):

将API密钥和敏感信息移动到
config/
下的
yml
文件中

例如,将这个yml文件加载到一个变量中

KEYS=YAML::load(File.open(#{RAILS\u ROOT}/config/config.yml”)


此外,例如,当将代码放到GitHub上时,这个
config.yml
将被添加到
.gitignore
中。相反,制作一个
config example.yml
并告诉开发人员获取他们自己的密钥和密码等,如果您使用*nix,将它们存储在本地
config.yml

环境变量中是最好的方法

将变量粘贴到.bashrc文件中,如下所示:

// no need for quotation marks
export GMAIL_USER=my_gmail_user_name@gmail.com
export GMAIL_PASSWORD=my_gmail_password
并在smtp初始值设定项中调用它们,如下所示:

ActionMailer::Base.smtp_settings = {
  :user_name            => ENV['GMAIL_USER'],
  :password             => ENV['GMAIL_PASSWORD']
} 

重新启动bash和rails应用程序。所有这些都应该起作用。Heroku有一篇关于如何在他们的网络上使用的好文章。

然后我会添加一个小的capistrano配方,将此文件的一个版本(存储在服务器上)符号链接到config/目录?我认为Apache不会阻止您使用环境变量。我的意思是我不知道怎么做。