2012-10-19 57 views
2

我需要將大量環境變量傳遞給由Unicorn Web服務器運行的Rails應用程序。該sample unicorn init script有下面幾行:將許多環境變量傳遞給Unicorn運行的Rails應用程序

APP_ROOT=/home/x/my_app/current 
<...> 
INIT_CONF=$APP_ROOT/config/init.conf 
<...> 
test -f "$INIT_CONF" && . $INIT_CONF 

所以我創建了一個$APP_ROOT/config/init.conf,把我所有的變量有這樣的:

VAR1=value1 
VAR2=value2 

還送了我這個文件的可執行文件(不知道這是否是必要的)

並重新啓動Unicorn。但是ENV["VAR1"]在我的申請中什麼都不會返回 ...

它應該以這種方式工作嗎?如果是的話,我做錯了什麼?如果不是,那麼我怎樣才能以一種乾淨的方式將許多env vars傳遞到Rails應用程序? (不污染地球環境,或將所有的人都在命令行)

更新我的調查表明,shell文件是這樣的:預期

. init.conf 
echo $VAR1 

作品。但是這一個:

. init.conf 
ruby -e "puts ENV['VAR1']" 

沒有。因此.將代碼導入腳本,但以此方式設置的env變量不會進一步傳輸。

+0

init.conf中應該包含什麼內容? – Nikola

回答

1

您可能必須從配置文件中「導出」變量。如果你把

export VAR1=value1 
export VAR2=value2 

進入配置文件嗎?

+0

太棒了!它按我希望的方式工作。我自己的調查幫助我理解'.'命令是如何工作的。所以只需設置'VAR1 = value1'不會創建env var,它就是一種局部變量(不存在於'env'輸出中) – khustochka

1

我會考慮使用foreman,特別是它的使用.env文件定義爲here

+0

謝謝,這可行,但需要引入另一個執行層。儘管我已經得到了一個更接近的答案(輸出變量),但這個答案也很有用,我學到了更多關於工頭的知識。非常感謝。 – khustochka

相關問題