繁体   English   中英

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

[英]How to store credentials for third party services in 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变量的好文章。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM