환경 변수를 사용하여 구성을 얻는 Heroku 프로젝트가 있지만 virtualenv를 사용하여 로컬에서 앱을 먼저 테스트합니다.
virtualenv 내의 원격 시스템에 정의 된 환경 변수를 설정하는 방법이 있습니까?
환경 변수를 사용하여 구성을 얻는 Heroku 프로젝트가 있지만 virtualenv를 사용하여 로컬에서 앱을 먼저 테스트합니다.
virtualenv 내의 원격 시스템에 정의 된 환경 변수를 설정하는 방법이 있습니까?
답변:
2017년 5월 17일 기준으로하는 것이 autoenv 상태의 README direnv은 아마 더 나은 옵션이며 autoenv을 의미는 더 이상 유지되지 않습니다.
나는 이것을 정확하게하기 위해 autoenv를 썼다 :
.env
로 적어도 내 경험에 따르면 파일 bork Heroku가 빌드 하는 것 같습니다 . 리포지토리에 포함시키지 마십시오. autoenv btw의 오랜 사용자 / 거대한 팬. 케네스 안녕, 너!
virtualenvwrapper를 사용하는 경우 (권장 사항)의 동일한 이름의 스크립트를 사용하여 다른 후크 (사전 활성화, 사후 활성화, 사전 비활성화, 사후 비활성화)를 정의 할 수 있습니다 $VIRTUAL_ENV/bin/
. 사후 활성화 후크가 필요합니다.
$ workon myvenv
$ cat $VIRTUAL_ENV/bin/postactivate
#!/bin/bash
# This hook is run after this virtualenv is activated.
export DJANGO_DEBUG=True
export S3_KEY=mykey
export S3_SECRET=mysecret
$ echo $DJANGO_DEBUG
True
이 구성을 프로젝트 디렉토리에 유지하려면 프로젝트 디렉토리에서로 심볼릭 링크를 작성하십시오 $VIRTUAL_ENV/bin/postactivate
.
$ rm $VIRTUAL_ENV/bin/postactivate
$ ln -s .env/postactivate $VIRTUAL_ENV/bin/postactivate
mkvirtualenv 를 사용할 때마다 심볼릭 링크 생성을 자동화 할 수도 있습니다 .
이 후에는 정리되지 않습니다. virtualenv를 비활성화하면 환경 변수가 지속됩니다. 대칭 적으로 정리하려면에 추가 할 수 있습니다 $VIRTUAL_ENV/bin/predeactivate
.
$ cat $VIRTUAL_ENV/bin/predeactivate
#!/bin/bash
# This hook is run before this virtualenv is deactivated.
unset DJANGO_DEBUG
$ deactivate
$ echo $DJANGO_DEBUG
환경에 이미 설정되어있을 수있는 환경 변수에이 변수를 사용하면 설정이 해제되어 virtualenv를 떠날 때 완전히 설정 해제됩니다. 따라서 이것이 가능한 경우 이전 값을 임시 어딘가에 기록 한 다음 비활성화시 다시 읽습니다.
설정:
$ cat $VIRTUAL_ENV/bin/postactivate
#!/bin/bash
# This hook is run after this virtualenv is activated.
if [[ -n $SOME_VAR ]]
then
export SOME_VAR_BACKUP=$SOME_VAR
fi
export SOME_VAR=apple
$ cat $VIRTUAL_ENV/bin/predeactivate
#!/bin/bash
# This hook is run before this virtualenv is deactivated.
if [[ -n $SOME_VAR_BACKUP ]]
then
export SOME_VAR=$SOME_VAR_BACKUP
unset SOME_VAR_BACKUP
else
unset SOME_VAR
fi
테스트:
$ echo $SOME_VAR
banana
$ workon myenv
$ echo $SOME_VAR
apple
$ deactivate
$ echo $SOME_VAR
banana
ln -s .env/postactivate $VIRTUAL_ENV/bin/postactivate
저에게는 효과가 없었습니다. ln
전체 경로를 원하므로해야 할 일ln -s `pwd`/.env/postactivate $VIRTUAL_ENV/bin/postactivate
ln
.
시도해 볼 수 있습니다 :
export ENVVAR=value
virtualenv_root / bin / activate에서. 기본적으로 활성화 스크립트는 virtualenv 사용을 시작할 때 실행되므로 모든 사용자 정의를 거기에 넣을 수 있습니다.
deactivate
설정 및 설정 해제의 균형을 유지하기 위해 정의 된 virtualenv_root / bin / activate 함수 에 'unset ENVVAR'을 추가 할 수 있습니다.
virtualenvwrapper없이 virtualenv 만 사용하면 환경 변수를 쉽게 설정할 수 있습니다.activate
를 활성화하기 위해 소싱 스크립트를 .
운영:
nano YOUR_ENV/bin/activate
다음과 같이 파일 끝에 환경 변수를 추가하십시오.
export KEY=VALUE
Danilo Bargen이 제안한대로 위의 큰 대답에서 환경 변수를 설정 해제하기 위해 비슷한 후크를 설정할 수도 있습니다.
cd
환경 변수를 갖기 위해 재정의 ? 떨림
여기에 좋은 답변이 많이 있지만 둘 다 비활성화에 환경 변수 설정 해제가 포함되어 있고 추가 라이브러리가 필요하지 않은 솔루션이 게시되어 있지 않으므로 virtualenv
여기를 사용하여 / bin / activate 편집 만 포함하는 솔루션이 있습니다. 변수 MY_SERVER_NAME
와 MY_DATABASE_URL
예제 :
activate 스크립트에 deactivate에 대한 정의가 있어야하며 그 끝에 변수를 설정 해제하려고합니다.
deactivate () {
...
# Unset My Server's variables
unset MY_SERVER_NAME
unset MY_DATABASE_URL
}
그런 다음 activate 스크립트의 끝에서 변수를 설정하십시오.
# Set My Server's variables
export MY_SERVER_NAME="<domain for My Server>"
export MY_DATABASE_URL="<url for database>"
이렇게하면 작동하기 위해 다른 것을 설치할 필요가 없으며 deactivate
virtualenv 에 남아있을 때 변수가 남지 않아도됩니다 .
virtualenv에는 로컬로이를 테스트하는 데 사용할 수있는 두 가지 방법이 있습니다. 첫 번째는 Heroku toolbelt (https://toolbelt.heroku.com/)를 통해 설치되는 도구입니다. 이 도구는 감독입니다. .env 파일에 저장된 모든 환경 변수를 로컬로 내 보낸 다음 Procfile 내에서 앱 프로세스를 실행합니다.
더 가벼운 접근 방식을 찾고 있다면 두 번째 방법은 .env 파일을 로컬로 만든 다음 다음을 실행하는 것입니다.
export $(cat .env)
django를 위해 설계되었지만 대부분의 설정에서 작동 해야하는 또 다른 방법은 django-dotenv를 사용하는 것입니다.
env
디렉토리 에서 virtualenv를 활성화 하고 .env
사용중인 저장된 환경 변수를 내보내려면 다음을 수행하십시오.
source env/bin/activate && set -a; source .env; set +a
echo 'alias e=". env/bin/activate && set -a; source .env; set +a"' >> ~/.bash_aliases