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

如何在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中。

+1

然后,我会添加一个小capistrano配方来将此文件(存储在服务器上)的一个版本符号链接到config /目录中? – ldavin 2012-07-06 15:53:43

+0

@Idavin或耙子任务。 – varatis 2012-07-06 18:12:26

环境变量是最好的方式,如果你是在* 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的好文章。

+0

很高兴知道,但我在apache – ldavin 2012-07-09 08:51:36

+0

我认为Apache并不妨碍你使用环境变量。我的意思是我不知道如何。 – juanpastas 2013-06-01 19:43:20