博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用dotenv管理环境变量
阅读量:5973 次
发布时间:2019-06-19

本文共 1244 字,大约阅读时间需要 4 分钟。

项目开发过程中,经常会涉及到类似数据库密码、第三方服务密钥等敏感信息。对于这些信息我们往往不会把它们直接写到codebase里,通常的做法是将它们以环境变量的形式传递。尽管这样能很好的解决敏感信息泄露的问题,但当这类数据有了规模,团队人员日益变多,修改Profile文件管理环境变量的方法就变得不那么奏效了,那么有没有一种集中高效易于分享的管理方式呢?答案就在dotenv这个Gem里。

安装

gem 'dotenv-rails', :groups => [:development, :test]

在Gemfile中添加上面内容,执行bundle install即可。

使用

最直接的用法是在Rails项目根目录创建一个.env文件,将涉及敏感信息的内容以下面形式写到里面。

S3_BUCKET=YOURS3BUCKETSECRET_KEY=YOURSECRETKEYGOESHERE

当遇变量值为多行时,可使用n转义字符表示,如下:

PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\nHkVN9…\n-----END DSA PRIVATE KEY-----\n"

变量的内部也支持计算,使用Bash语法$(command)可以动态的构造字符串变量值

DATABASE_URL="postgres://$(whoami)@localhost/my_database"

此外,也可以在变量名前像在bashrc中定义变量一样,前面加一个export,这样这个.env文件就可以通过source的方式批量定义环境变量,以供其它bash脚本使用。

export S3_BUCKET=YOURS3BUCKETexport SECRET_KEY=YOURSECRETKEYGOESHERE

上面介绍的主要是定义方法,访问其实没啥需要介绍的,跟使用通过bashrc定义的环境变量一样,通过ENV变量即可加载。

config.fog_directory  = ENV['S3_BUCKET']

注意事项

在Rails中,.env变量通过回调before_configuration进行加载,这意味着你只有在Application定义以后才能访问到它们。如果你有场景需要在这之前加载环境变量,那么只能自己手动操作。

# config/application.rbBundler.require(*Rails.groups)Dotenv::Railtie.loadHOSTNAME = ENV['HOSTNAME']

另一个需要注意的地方是,当你用了需要依赖环境变量才能加载的Gem时,你需要把dotenv-rails置于该Gem之前,并且设置require参数如下:

gem 'dotenv-rails', :require => 'dotenv/rails-now'gem 'gem-that-requires-env-variables'

-完-

参考引用

图片描述

转载地址:http://jddox.baihongyu.com/

你可能感兴趣的文章
L-1-19 Linux之RAID&分区&文件系统命令
查看>>
stat查找权限以数字形式显示
查看>>
Java面向对象学习笔记(二)
查看>>
源码编译安装httpd2.4.9
查看>>
linux系统优化
查看>>
在使用 Windows Update 检查更新时,系统没有提供下载 Windows 7 SP1 的选项
查看>>
CSS控制XML与通过js解析xml然后通过html显示xml中的数据
查看>>
在Struts + Spring + Hibernate的组合框架模式中,三者各自的特点都是什么
查看>>
Windows 2012 R2 DataCenter服务器DNS无法打开AD, DNS错误代码4000 4007 4013
查看>>
网络学习(二十一)创建用户及文件夹共享设置的简单应用
查看>>
java基础数据类型char
查看>>
打印 PE导入导出表
查看>>
miniWindbg 功能
查看>>
五、判断银行卡号的正则
查看>>
mysql基于mysqlslap的压力测试
查看>>
zencart中query_factory.php中连接mysql次数
查看>>
fail2ban 保护linux安全(转载)已用于生产环境
查看>>
if,for,while,case,break,continue,exit
查看>>
表格元素的添加和删除,计算器,全选全不反选
查看>>
数据约束
查看>>