繁体   English   中英

ENV变量中的Capistrano和API键?

[英]Capistrano and API keys in ENV variables?

我正在使用Capistrano部署我的rails应用程序。 我想在服务器上保存一些API密钥作为环境变量。 使用Capistrano部署的rails应用程序应该可以访问这些API密钥。 这些API密钥也应该可以作为守护程序运行的单独ruby文件访问。

在环境变量中设置API密钥似乎是理想的解决方案,但是,我无法使用ENV["SOME_KEY"]在我的rails应用程序中访问它们。

根据这篇文章 ,由于capistrano运行为非交互式和非登录,因此不会加载~/.bashrc~/.bash_profile 该流程图表明我应该使用$BASH_ENV

我可以在$BASH_ENV添加我的api密钥并在我的rails应用程序和使用ENV["SOME_KEY"]的守护进程的ruby文件中访问它们吗?

我还想把api密钥添加到服务器上的某个文件中,并将其符号链接到ruby文件dir和rails目录,然后打开并阅读它。 这可能吗?

根据我的经验,有几种方法可以很好地与Capistrano配合使用。

rbenv -瓦尔

如果您在服务器上使用Ruby via Rbenv,那么您很幸运。 有一个名为rbenv-vars的Rbenv插件会自动将环境变量注入任何Ruby进程,其中包括您的Rails应用程序。 只需使用KEY=value语法将变量添加到服务器上的~/.rbenv/vars 而已。

dotenv

dotenv gem是一个类似的解决方案,但它可以作为您添加到Rails应用程序的gem,并且不需要Rbenv或任何其他支持工具。 dotenv-rails添加到Gemfile并进行部署。 Dotenv会自动在Rails应用程序的根目录中查找.env.production文件。 对于Capistrano,在Capistrano的shared目录中的服务器上创建.env.production文件,然后将.env.production添加到:linked_files 现在每个部署都将链接到它。 使用KEY=value语法声明变量。

的.bashrc

使用export KEY=value语法在服务器上的~/.bashrc文件的最顶部声明​​变量。 在Ubuntu上,即使在非交互式SSH会话期间也会评估此文件。 只需确保在此case语句之前将声明放在顶部:

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

CentOS可能是一个不同的故事,所以YMMV。

capistrano-env_config我制作了一个Capistrano插件capistrano-env_config用于管理和同步Capistrano集群中的环境变量,该集群通过修改/etc/environment文件使整个系统中的环境变量可用。 它易于使用,与您使用Heroku工具带设置环境变量的方式类似。 这里有些例子:

cap env:list
cap env:get[VARIABLE_NAME, VARIABLE_NAME, ...] 
cap env:unset[VARIABLE_NAME, VARIABLE_NAME, ...] 
cap env:set[VARIABLE_NAME=VALUE, VARIABLE_NAME=VALUE, ...] 
cap env:sync

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM