【发布时间】:2017-01-30 03:29:46
【问题描述】:
我正在使用 Capistrano 部署我的 rails 应用程序。我想将服务器上的一些 API 密钥保存为环境变量。我使用 Capistrano 部署的 Rails 应用程序应该可以访问这些 API 密钥。那些作为守护进程运行的单独的 ruby 文件也应该可以访问这些 API 密钥。
在环境变量中设置 API 密钥似乎是理想的解决方案,但是,我无法在我的 rails 应用程序中使用 ENV["SOME_KEY"] 访问它们。
根据this post,由于 capistrano 以非交互和非登录方式运行,~/.bashrc 和 ~/.bash_profile 没有加载。流程图建议我应该使用$BASH_ENV。
我可以在$BASH_ENV 中添加我的api 密钥,然后在我的rails 应用程序和带有ENV["SOME_KEY"] 的守护程序的ruby 文件中访问它们吗?
我还在考虑将 api 密钥添加到服务器某处的文件中,并将其符号链接到 ruby 文件目录和 rails 目录,然后打开并读取它。这可能吗?
【问题讨论】:
-
在尝试正确传播环境变量后,我个人选择将机密等存储在版本控制系统中未包含的目录中的文件中。小心点!
-
检查 dotenv gem,它基本上按照@ollpu 所说的去做。 github.com/bkeepers/dotenv
-
@ollpu:所以基本上是在部署后手动将文件添加到 rails 目录?将这些文件添加到目录后如何读取它们?
-
查看服务器操作系统的文档。几乎总有一种方法可以以独立于 shell 的方式设置 ENV 变量。
-
例如,您可以将它们添加到
/etc/rc.local或/etc/environments。请告知您在服务器上使用的操作系统以获取详细说明。
标签: ruby-on-rails ruby api environment-variables capistrano