Mee*_*tat 9 ruby api capistrano ruby-on-rails environment-variables
我正在使用Capistrano部署我的rails应用程序.我想在服务器上保存一些API密钥作为环境变量.使用Capistrano部署的rails应用程序应该可以访问这些API密钥.这些API密钥也应该可以作为守护程序运行的单独ruby文件访问.
在环境变量中设置API密钥似乎是理想的解决方案,但是,我无法在我的rails应用程序中访问它们ENV["SOME_KEY"].
根据这篇文章,因为capistrano运行为非交互式和非登录,~/.bashrc并且~/.bash_profile未加载.流程图表明我应该使用$BASH_ENV.
我可以$BASH_ENV在我的rails应用程序和作为守护进程的ruby文件中添加我的api密钥并访问它们ENV["SOME_KEY"]吗?
我还想把api密钥添加到服务器上的某个文件中,并将其符号链接到ruby文件dir和rails目录,然后打开并阅读它.这可能吗?
Mat*_*son 17
根据我的经验,有几种方法可以很好地与Capistrano配合使用.
rbenv - 瓦尔
如果您在服务器上使用Ruby via Rbenv,那么您很幸运.有一个名为rbenv-vars的Rbenv插件会自动将环境变量注入任何Ruby进程,其中包括您的Rails应用程序.只需~/.rbenv/vars使用KEY=value语法将变量添加到服务器上即可.而已.
dotenv
该dotenv宝石是一个类似的解决方案,但它的工作原理为您添加到您的Rails应用程序,并且不需要Rbenv或其他任何辅助工具的瑰宝.添加dotenv-rails到您的Gemfile并进行部署.Dotenv会自动.env.production在Rails应用程序的根目录中查找文件.对于Capistrano,.env.production在Capistrano shared目录中的服务器上创建一个文件,然后添加.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
Run Code Online (Sandbox Code Playgroud)
CentOS可能是一个不同的故事,所以YMMV.
| 归档时间: |
|
| 查看次数: |
3183 次 |
| 最近记录: |