使用工头时处理开发环境变量



使用 foreman gem 时,我包含一个 .env 文件来为我的开发环境指定不同的环境变量。

但是,在与其他开发人员协作处理项目时,保持我们的 .env 文件彼此同步而不将来自 Twilio 和 Pusher 等服务的凭据检查到源代码管理中,这是一种好方法?

目前,我在根目录保留了一个更新的 README.md,用于指定我们需要哪些密钥,但是每次拉取时都必须查看自述文件是一项额外的工作。

我们(我没有想出这个,但我的团队已经使用它一段时间了)有一个env子目录,该子目录位于我们运行 foreman 的目录中。 在 env 中,有像 DATABASE_URIMY_ENV_KEY 之类的文件,或者您需要的任何其他文件,其值是环境变量应设置为的值。

然后我们有一个名为 start_server.sh 的脚本,我们从 Foreman 的 procfile 调用它:

#!/bin/bash
for env_file in `pwd`/env/*;
do
    name_of_var=`basename $env_file`
    get_val_of_var_cmd='echo "$'$name_of_var'"'
    val_of_var=`eval "$get_val_of_var_cmd"`
    if [[ "$val_of_var" == "" ]];
    then
    val_of_var=`cat $env_file`
    cmd="export $name_of_var='$val_of_var'"
    echo "Setting $name_of_var=$val_of_var"
    eval $cmd
    else
    echo "Using   $name_of_var=$val_of_var"
    fi
done
exec bundle exec unicorn $*

可以将env目录及其中的文件添加到源代码管理中。

自从提出这个问题以来,我发现了约翰·雷西格(John Resig)的这篇文章,内容是关于他从同事克雷格·西尔弗斯坦(Craig Silverstein)那里学到的技巧。

http://ejohn.org/blog/keeping-passwords-in-source-control/

但是,我将选择他的原始解决方案,而不是将密钥加密到源代码管理中,即创建一个包含空值的虚拟密钥文件,并将实际密钥存储在安全但可供我的协作者访问的地方。

相关内容

  • 没有找到相关文章

最新更新