Rails 4为全局访问存储Api和密钥

时间:2014-02-05 04:52:31

标签: ruby-on-rails ruby-on-rails-4 constants

我们正在整个应用程序中集成一对api。我们从很多地方打电话给api。

我们希望全局化常量,使其可用,并且可以在任何地方调用。

如果我们必须更改细节,我们不需要在多个地方更改api和秘密。

2 个答案:

答案 0 :(得分:1)

要实现这一点,您可以存储API密钥和机密,而无需将它们签入源代码控制,一种解决方案是将它们存储在YAML文件中,然后将其包含在application.rb文件中。然后可以在应用中的任何位置调用它们。

要了解如何执行此操作,您可以在其上观看此railscasts集。

答案 1 :(得分:1)

YAML文件是一个很好的解决方案。另一种方法是将密钥存储在数据库中。您可以创建一个表格,如: api提供者名称 键 秘密

通过这种方式,您可以使用简单的activerecord请求在任何需要的地方提取凭据。 @credentials = ApiKeys.where(提供者:“谷歌”) - 为了额外的安全性,你可以散列/加盐它们,但一般来说我假设你是唯一一个可以访问你的生产数据库的人。我不喜欢在“其中一个开发人员”的笔记本电脑或PC上存储凭证。最后,钥匙无处不在,你必须确保每个人都有最新的版本。

另一方面,直接从您的应用程序调用API是一个非常糟糕的主意。您应该使用背景工作者,如Sidekiq或Resque。