2015-01-05 4 views
1

내 응용 프로그램 배포 여부를 결정하기 위해 환경 변수가 있는지 확인하고 있습니다 (내 로컬 컴퓨터에서 실행하는 것이 좋음).sinatra app에서 환경 변수를 찾을 수 없지만 테스트 스크립트가 가능합니다.

내 테스트 스크립트는 변수 값을 찾고 표시 할 수 있지만 내 앱에 따르면 변수가 없습니다.

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의 가치를 로그인하는 경우

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

내가 기대하지 않습니다 (대신 즉 '~/different/path/to/encrypted_data_bag_secret''/path/to/encrypted_data_bag_secret')

내 기본 실행 스크립트의 내부에서 내 앱을 시작하는 방법은 다음과 같습니다. app install

APPLICATION_VERSION=1.0.130 
APPLICATION_NAME=app-name 

그것은 그것을 실행 컨텍스트의 문제라고 제안했지만, 난 어떻게 잘 모르겠어요 : 나는 env | grep APP을 할 경우 대신

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)" 

) 폴더로 이동해야하는 모든 곳에서 내가 얻을 그게 바로 그 문제를 해결할 수 있습니다.

뭐야? 어떤 도움이든 & 제안을 주시면 감사하겠습니다.

+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"