如何在Rails中存储第三方服务的凭证
我正在通过SendGrid为我的rails应用程序发送的邮件设置重定向。 但是我对于被告知存储凭证的方式并不满意。如何在Rails中存储第三方服务的凭证
因为它被指定为there,他们建议覆盖config/environment.rb文件中的ActionMailers默认值。我发现我的前任创建了一个初始化器/ smtp.rb文件,在其中他定义了以前的设置,但通过发现此文件,我发现了SMTP密码...
如果我修改这些文件中的任何一个,anuone有权访问git存储库将有权访问凭据(包括我们使用的前端和后端自由职业者)。
我正在考虑创建一个保留在服务器的共享文件夹(如database.yml文件)上的文件,并且每次部署时都会将其链接到应用程序,这要归功于capistrano。
您对此有何看法?将这个initializers/smtp.rb移动到服务器的共享文件夹并在部署时进行符号链接可以吗?
我的建议(我见过做):
移动API密钥和敏感信息到config/
下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 [email protected]
export GMAIL_PASSWORD=my_gmail_password
,并呼吁他们在您的SMTP初始化像这样:
ActionMailer::Base.smtp_settings = {
:user_name => ENV['GMAIL_USER'],
:password => ENV['GMAIL_PASSWORD']
}
重新启动bash和您的rails应用程序。一切都应该工作。 Heroku有一篇关于如何在他们的网络上使用env variables的好文章。
很高兴知道,但我在apache – ldavin 2012-07-09 08:51:36
我认为Apache并不妨碍你使用环境变量。我的意思是我不知道如何。 – juanpastas 2013-06-01 19:43:20
然后,我会添加一个小capistrano配方来将此文件(存储在服务器上)的一个版本符号链接到config /目录中? – ldavin 2012-07-06 15:53:43
@Idavin或耙子任务。 – varatis 2012-07-06 18:12:26