使用foreman gem时,我包含一个.env文件来为我的开发环境指定不同的环境变量。
但是,在项目上与其他开发人员协作时,有什么方法可以让我们的.env文件保持同步,而无需检查来自Twilio和Pusher等服务的凭据到源代码管理中?
目前,我在根目录中保留了一个更新的README.md,它指定了我们需要的密钥,但是每次拉动时都需要查看自述文件,这是额外的工作。
答案 0 :(得分:0)
我们(我没有提出这个问题,但我的团队现在已经使用了一段时间)在我们运行的工作目录中有一个env
子目录。在env中,有DATABASE_URI
或MY_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
目录及其中的文件可以添加到源代码管理中。
答案 1 :(得分:0)
自从提出这个问题以来,我发现John Resig的这篇文章是关于他从同事Craig Silverstein那里得到的一个提示。
http://ejohn.org/blog/keeping-passwords-in-source-control/
不是将密钥加密到源代码控制中,而是选择创建包含空值的虚拟密钥文件的原始解决方案,并将实际密钥存储在安全但可由我的协作者访问的地方。