概述Ruby,Unicorn和环境variables
在玩Heroku的同时,我发现他们使用环境variables来实现服务器本地configuration的方法非常出色。 现在,在build立我自己的应用服务器的同时,我发现自己想知道如何复制。
我正在部署一个Sinatra应用程序,骑在Unicorn和Nginx上。 我知道Nginx不喜欢和环境一起玩,让自己出去玩。 我可能会把这些variables放在独angular兽configuration文件的某个地方,但是由于这是在应用程序的其他部分进行版本控制,所以这种configuration的目的就是使服务器环境中的configuration成为可能。 就我而言,没有理由不把应用程序特定的configuration文件与应用程序的其余部分保持在一起。
第三个也是最后一个(据我所知)选项是将它们设置在产卵壳中。 那是我迷路的地方。 我知道login和非loginshell使用不同的rc文件,我不确定是否用sudo -u @R_419_6822@ stuff调用东西是否产生loginshell。 我做了一些家庭作业,并问谷歌和人,但我仍然不完全确定如何处理它。 也许我只是笨手笨脚的,无论如何,如果有人能够对整个壳牌环境交易有所了解,我会非常感激。
更改正在运行的进程的环境variables
Ubuntu上的Codeigniter没有欢迎消息
在linux中定义可以在PHP中访问的variables
已完成500内部服务器错误; RestClIEnt :: NotAcceptable(406不可接受)
/ usr / bin / env关于shebang行的问题
不能在cmd批处理中打印variables
如何让virtualenv在Ubuntu上使用dist-packages?
在bat文件中设置的cygwin环境variables
如何将环境设置导入到我的Perl程序中?
在batch file中设置windows环境variables
我认为你的第三种可能性是正确的。 你所缺少的是包装脚本的思想,其唯一的功能是设置环境,然后用任何所需的选项调用主程序。
要创建一个可以用作控制脚本的包装脚本(如果prodEnv使用DB = ProdDB等),还有一件事简化了这个问题。 Bash / ksh都支持一个名为sourcing files的功能。 这是一个shell提供的 *** 作,用于打开文件并执行文件中的内容,就像在主脚本中一样。 像C和其他语言的#include一样。
ksh和bash会自动地源/etc/profile , /etc/profile /var/etc/profile.local /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 ……
随着您在数据处理环境中开发越来越多的脚本,您可以始终将envfile的source放在顶部。 当您最终更改服务器的物理位置(或名称)时,您只有一个地方需要进行更改。
IHTH
还有一些处理这个问题的宝石。 无论有无heroku都可以使用的figaro 。 figaro使用yaml文件(在配置和git忽略)来跟踪变量。 另一个选项是从.env文件读取变量的.env 。 还有另一篇文章 ,所有的选项。
为了产生一个交互式shell(aka登录shell),你需要像这样调用sudo:
sudo -i -u <user> <command>
你也可以使用-E来保存环境。 这将允许一些变量为您的当前环境适用于使用sudo调用的命令。
我通过明确告诉Unicorn在其init.d脚本中作为启动的一部分读取一个变量文件来解决了类似的问题。 首先,我在名为variables的应用程序根目录上创建了一个文件。 在这个脚本中,我调用所有环境变量的export VAR=value ,例如export VAR=value 。 然后我在/etc/init.d/unicorn文件中定义了一个变量GET_VARS=source /path/to/variables 。 最后,我修改了启动选项以读取su – $USER -c \”$GET_VARS && $CMD\” ,其中$CMD是启动命令, $USER是应用程序用户。 因此,文件中定义的变量在启动时被导出到Unicorn的应用程序用户的shell中。 请注意,我使用了一个与本文相同的init.d脚本。
总结
以上是内存溢出为你收集整理的Ruby,Unicorn和环境variables全部内容,希望文章能够帮你解决Ruby,Unicorn和环境variables所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
请登录后查看评论内容