gpt4 book ai didi

Ruby、Unicorn 和环境变量

转载 作者:数据小太阳 更新时间:2023-10-29 06:44:20 26 4
gpt4 key购买 nike

在使用 Heroku 时,我发现他们使用环境变量进行服务器本地配置的方法非常棒。现在,在设置自己的应用程序服务器时,我发现自己想知道复制它有多难。

我正在部署一个 sinatra 应用程序,使用 Unicorn 和 Nginx。我知道 nginx 不喜欢玩弄环境,所以那个就出来了。我可能可以将 vars 放在 unicorn 配置文件中的某个位置,但由于它与应用程序的其余部分一起处于版本控制之下,所以它有点违背了让配置位于服务器环境中的目的。就我而言,没有理由不将我的应用特定配置文件与应用的其余部分放在一起。

第三个也是最后一个(据我所知)选项是将它们设置在产卵 shell 中。那就是我迷路的地方。我知道登录和非登录 shell 使用不同的 rc 文件,我不确定用 sudo -u http stuff 调用某些东西是否会生成登录 shell。我做了一些功课,问了谷歌和人,但我仍然不完全确定如何处理它。也许我只是太笨了……不管怎样,如果有人能对整个 shell 环境交易有所了解,我将不胜感激。

最佳答案

我认为您的第三种可能性是正确的。您缺少的是包装脚本的想法,其唯一功能是设置环境,然后使用所需的任何选项调用主程序。

要制作一个可以用作控制脚本的包装器脚本(如果 prodEnv 使用 DB=ProdDB 等),还有一个部分可以简化这个问题。 Bash/ksh 都支持称为源文件的功能。这是 shell 提供的一个操作,用于打开文件并执行文件中的内容,就好像它是内联在主脚本中一样。就像 C 和其他语言中的 #include

ksh 和 bash 将自动获取 /etc/profile/var/etc/profile.local(有时)、$HOME/.profile。还有其他文件名也会被拾取,但在这种情况下,您需要制作自己的 env 文件并显式加载它。

当我们谈论包装器脚本时,如果您想管理环境的设置方式,您将希望在包装器脚本中进行采购。

如何获取环境文件?

envFile=/path/to/my/envFile  
. $envFile

其中 envFile 将填充如下语句

dbServer=DevDBServer
webServer=QAWebServer
....

您可能会发现您需要导出这些变量才能使它们可见

export dbServer webServer

支持备用分配/导出

export dbServer=DevDBServer
export webServer=QAWebServer

根据不同环境的不同程度,您可以让包装器脚本确定要加载的环境文件。

case $( /bin/hostame ) in
prodServerName )
envFile=/path/2/prod/envFile ;;
QASeverName )
envFile=/path/2/qa/envFile ;;
devSeverName )
envFile=/path/2/dev/envFile ;;
esac

. ${envFile}

#NOW call your program
myProgram -v -f inFile -o outFile ......

随着您在数据处理环境中开发越来越多的脚本,您始终可以在顶部source 您的envFile。当您最终更改服务器的物理位置(或其名称)时,您只有一个地方需要进行更改。

健康教育

关于Ruby、Unicorn 和环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5836887/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com