在哪里存储env vars用于登台/生产rails应用程序

时间:2015-03-04 11:06:09

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

在Rails默认secrets.yml中,它有代码:

# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

跟随the 12 factor recommendation在环境变量中存储配置。

现在,一种替代解决方案是不将secrets.yml检入git,并在生产/登台服务器上维护它的副本。然后你会对每个部署进行符号链接(我使用Capistrano)并且完全避免使用env vars。 12因素似乎建议反对这种方法,引用(以及其他原因)env vars更好,因为它们是语言和不可知的标准。

所以,我有两个问题:

  1. 如果您将配置内容存储在env vars中,然后将这些env变量提取到secrets.yml,那么如何在生产服务器上管理这些env变量?你把它们全部放在你的~/.bashrc文件中吗?或者有更好的方法吗?

  2. 在env vars中存储似乎没有什么实际好处,而不是存储在符号链接的secrets.yml中。我是说对了,还是我错过了一个明显的好处?

1 个答案:

答案 0 :(得分:2)

倒退:

  • 2)移动部件较少,因为在部署时,您不必使用app目录中的文件。如果您预先烘焙app-server的图像(例如使用Docker),或者使用像Heroku这样的app-as-a-static-slug服务,则可以在分段和生产中运行相同的图像并在应用程序启动时提供不同的环境变量。

  • 1)我使用dotenv(或dotenv-rails)为开发和测试提供环境,并通过Heroku提供环境,在运行映像时通过Docker提供环境,或者使用Ansible / Puppet /包括它是一个/etc/environment.d文件,包含你的.bashrc和Upstart / Monit的配置/运行你的app的任何东西。