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

我正在通过SendGrid为我的rails应用程序发送的邮件设置重定向。 但是,我对告知存储凭据的方式并不满意。

在那里指定,他们建议覆盖config / environment.rb文件中的ActionMailers默认值。 我发现我的前任创建了一个初始化器/ smtp.rb文件,他在那里定义了以前的设置,但是通过发现这个文件,我发现了SMTP密码……

如果我修改任何这些文件,那么有权访问git存储库的人将可以访问凭据(包括我们使用的前端和后端自由职业者)。

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

你怎么看呢? 将此初始化程序/ smtp.rb移动到服务器的共享文件夹并在部署时将其符号链接是否可以?

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

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

例如,将此yml文件加载到变量中

KEYS = YAML::load(File.open("#{RAILS_ROOT}/config/config.yml"))

瞧。

此外,例如,当您将代码放在GitHub上时,此config.yml将添加到.gitignore 。 相反,创建一个config-example.yml并告诉开发人员获取他们自己的密钥和密码等,将它们存储在本地config.yml

如果你在* nix上,环境变量是最好的方法

将变量粘贴在.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有一篇关于如何在他们的网络上使用env变量的好文章。