Ruby、Unicorn 和环境变量

2024-03-03

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

我正在部署一个 sinatra 应用程序,使用 Unicorn 和 Nginx。我知道nginx不喜欢玩弄环境,所以那个就out了。我可能可以将变量放在独角兽配置文件​​中的某个位置,但由于它受到应用程序其余部分的版本控制,因此它有点违背了将配置放在服务器环境中的目的。就我而言,没有理由不将我的应用程序特定配置文件与应用程序的其余部分保存在一起。

第三个也是最后一个(据我所知)选项是将它们设置在生成外壳中。那就是我迷路的地方。我知道登录和非登录 shell 使用不同的 rc 文件,并且我不确定是否使用sudo -u http stuff是否生成登录 shell。我做了一些功课,并询问了谷歌和人,但我仍然不完全确定如何处理它。也许我只是愚蠢......无论哪种方式,如果有人能够阐明整个 shell 环境交易,我真的很感激。


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

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

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 在顶部。当您最终更改服务器的物理位置(或其名称)时,您只需在一个位置进行更改。

IHTH

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby、Unicorn 和环境变量 的相关文章

随机推荐