关于如何在 SO 和网络上管理 API 令牌存在一些问题,但我看到很多人只是重复他们在其他地方阅读的内容,而且他们通常没有多大意义......
我想知道你们是如何处理所有这些 API 令牌等的。
这是我到目前为止使用 3 种不同的宝石所阅读的内容
秘密.yml
Rails 4.1 引入,应该成为存储秘密的约定
是(显然不是?)意味着被推送到存储库。但是我经常看到使用环境变量进行生产的示例
development:
secret_key_base: super_long_secret_key_for_development
...
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
...
在这一点上,有人问“我们为什么要使用 ENV 进行生产?”,这是 IMO 的一个合法问题。但是后来有人回答“我们不希望在应用程序中对生产令牌进行硬编码”(也许只是我,但是哼SECRETS .yml,这个名字听起来像是你不想提交的某个文件对吗?),并且最后没有人真正回答这个问题
但我仍然设法找到这个和那个:
优点:
- 导轨约定。
capistrano-secrets
使用gem轻松部署和cap [stage] setup
(它只部署阶段秘密很好)- YML 数据结构 (array/hash ok) + 可以使用 Ruby 代码
缺点:
- 需要使用
Rails.application.secrets.xxx
- 许多像 AWS 这样的服务仍然从 ENV 中读取数据来自动设置它们的 gems/services
- 不是12个因素的方式(或者是吗?)
- 很新,还没有真正使用过?
Bkeepers dotenv
只需在 Rails 启动时读取的根目录下定义一个 .env 文件
使用capistrano-env
和capistrano
专业人士
- ENV 在 12factor 规则中
- 3.5k 颗星……也许不是白费?
缺点
- 没有自定义代码,仅限于字符串字符串键/值
费加罗
某种混合机密/ENV。考虑到 12factors/Rails/Heroku,但最终似乎并不比其他的更好......
从上面和我没有写的其余部分来看,如果将这些秘密放在 ENV 中,secrets.yml 似乎会是一个很好的赢家(而且我Rails.Application.secrets
每次都懒得写)。
所以,假设我启动了一个全新的 Rails 应用程序,并且也是基于您的经验。你会选哪一个 ?
(我的特定堆栈使用 AWS + Capistrano,没有 Heroku)