2015-01-05 25 views
1

我正在使用環境變量的存在來確定我的應用程序是否部署(如在我的本地計算機上運行)。sinatra應用程序找不到環境變量,但測試腳本可以

我的測試腳本可以找到並顯示變量值,但我根據我的應用程序變量不存在。

test.rb

Secret_Key_Path = ENV['APPLICATION_VERSION'] ? '/path/to/encrypted_data_bag_secret' : File.expand_path('~/different/path/to/encrypted_data_bag_secret') 
puts ENV['APPLICATION_VERSION'] 
puts Secret_Key_Path 
puts File.exists? Secret_Key_Path 

info.rb(相關位)

::Secret_Key_Path = ENV['APPLICATION_VERSION'] ? '/path/to/encrypted_data_bag_secret' : File.expand_path('~/different/path/to/encrypted_data_bag_secret') 

如果我登錄的Secret_Key_Path它記錄作爲值的價值我不希望(即'~/different/path/to/encrypted_data_bag_secret'代替'/path/to/encrypted_data_bag_secret'

下面是我如何啓動我的應用程序(從我的主要可執行腳本內部,因此我可以運行app install從任何地方,而不必去文件夾)

exec "(cd /path/to/app/root && exec sudo rackup --port #{80} --host #{'0.0.0.0'} --pid /var/run/#{NAME}.pid -O NAME[#{NAME}] -D)" 

如果我做env | grep APP我得到:

APPLICATION_VERSION=1.0.130 
APPLICATION_NAME=app-name 

有人建議,這是一個執行上下文的問題,但我不知道怎麼樣要解決這個問題,如果是這樣的話。

那麼最近怎麼回事?任何幫助&建議,將不勝感激。

+2

我認爲這是關於使用'sudo',它改變它執行命令的env。不幸的是,我不知道如何解決它。 – matt

+0

我刪除了sudo,它工作,所以謝謝。 – Thermatix

+0

@matt把這個答案放在答案中,這個問題可以被「回答」。 – lcguida

回答

2

您可以通過使用-E開關讓你的環境變量使用sudo:

從手冊:

-E,--preserve-ENV 表示安全策略,用戶希望以保留其現有的環境變量。如果用戶沒有權限保留環境,則安全策略可能會返回錯誤 。

例子:

$ export APPLICATION_VERSION=1.0.130 
$ export APPLICATION_NAME=app-name 

檢查變量:

$ sudo -E env | grep APP 

,你應該得到的輸出:如果你想保持變量永久依然古色古香你

APPLICATION_NAME=app-name 
APPLICATION_VERSION=1.0.130 

而且可以添加到/etc/sudoers文件:

Defaults env_keep += "APPLICATION_NAME APPLICATION_VERSION"