导出本地开发和heroku部署的环境变量

时间:2017-05-16 16:58:41

标签: bash heroku environment-variables

我想用环境变量设置一些用于开发,登台和生产的文件,例如:

application_root/development.env

KEY1=value1
KEY2=value2

会有类似的文件staging.envproduction.env

我正在寻找几个不同的bash脚本,这些脚本允许在开发或暂存/生产中加载所有这些变量。

在本地开发中,我希望为文件中的每一行有效地运行export KEY1=value1

对于登台/制作,我将部署到Heroku,并希望为heroku config:set -a herokuappname KEY1=value1staging文件中的每一行有效运行production.env

我知道有一些宝石是为这样设计的,但看起来这可能很简单。我还喜欢将.env文件作为简单的键和值列表的灵活性,而不是特别绑定到任何语言/框架。如果我不得不改变一些关于这些变量需要加载的方式,那就是更改脚本而不是.env文件。

1 个答案:

答案 0 :(得分:0)

在最简单的形式中,您可以将键值对加载到bash数组中,如下所示:

IFS=$'\n' read -d '' -ra nameValuePairs < ./development.env

在Bash v4 +中,它更简单:

readarray -t nameValuePairs < ./development.env

然后,您可以将生成的"${nameValuePairs[@]}"数组传递给exportheroku config:set ...等命令; e.g:

export "${nameValuePairs[@]}"

但请注意,如果输入*.env文件符合以下条件的所有,则上述内容仅按预期工作:

  • 键是语法上有效的shell变量名,行的格式为<key>=<value>=周围没有空格
  • 这些行不包含引号,也没有前导或尾随空格
  • 文件中没有空/空行或注释行。
  • 每个值都限制在一行。

对于不符合此严格格式的文件,需要采用不同的方法;例如,this related question处理可能包含引用的值的文件。

以下是名为bash的{​​{1}}脚本的源代码(load_env后缀通常不是必需且含糊不清的):

  • 您可以使用感兴趣的.sh文件调用它,它会根据*.env或heroku config:set …) >文件名

  • 但是,如上所述,您必须脚本(使用export或其有效source别名bash)才能创建当前 shell可见的环境变量(.) 为了防止模糊的失败,如果您传递export文件并在没有采购的情况下调用脚本,脚本会抱怨。

示例:

development.env

./load_env ./staging.dev . ./load_env ./development.dev # !! Note the need to source 源代码

load_env
相关问题