mka*_*ito 11 ruby shell environment nginx unicorn
在玩Heroku时,我发现他们使用环境变量进行服务器本地配置的方法非常出色.现在,在设置我自己的应用程序服务器时,我发现自己想知道复制有多难.
我正在部署sinatra应用程序,骑着Unicorn和Nginx.我知道nginx不喜欢玩环境,所以一个人出来了.我可以将变量放在unicorn配置文件中的某个地方,但由于这是在应用程序的其余部分的版本控制下,它有点失败了配置在服务器环境中的目的.就我而言,没有理由不将我的特定于应用程序的配置文件与应用程序的其余部分保持在一起.
第三个也是最后一个(据我所知)选项是在产卵shell中设置它们.那就是我迷路的地方.我知道登录和非登录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
Run Code Online (Sandbox Code Playgroud)
其中envFile将填充如下的语句
dbServer=DevDBServer
webServer=QAWebServer
....
Run Code Online (Sandbox Code Playgroud)
您可能会发现需要导出这些变量才能使它们变得不可见
export dbServer webServer
Run Code Online (Sandbox Code Playgroud)
支持备用分配/导出
export dbServer=DevDBServer
export webServer=QAWebServer
Run Code Online (Sandbox Code Playgroud)
根据不同环境的不同之处,您可以让包装器脚本确定要加载的环境文件.
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 ......
Run Code Online (Sandbox Code Playgroud)
随着您在数据处理环境中开发越来越多的脚本,您可以source
始终将envFile放在最顶层.当您最终更改服务器的物理位置(或其名称)时,您只需要一个位置即可进行更改.
IHTH