環境変数を使用して構成を取得するHerokuプロジェクトがありますが、virtualenvを使用してアプリをローカルで最初にテストします。
virtualenv内のリモートマシンで定義された環境変数を設定する方法はありますか?
環境変数を使用して構成を取得するHerokuプロジェクトがありますが、virtualenvを使用してアプリをローカルで最初にテストします。
virtualenv内のリモートマシンで定義された環境変数を設定する方法はありますか?
回答:
2017年5月17日の時点で、autoenvのREADMEには、direnvがおそらくより優れたオプションであり、autoenvがもはや維持されていないことが示されています。
私はこれを正確に行うためにautoenvを書きました:
.env
ちなみに、少なくとも私の経験では、ファイルがHerokuのビルドに悪影響を及ぼしているようです。そのため、リポジトリに含めないでください。長い間ユーザー/ autoenv btwの大ファン。こんにちは、ケネス、ダマン!
virtualenvwrapperを使用している場合(使用することを強くお勧めします)、同じ名前のスクリプトを使用して、異なるフック(preactivate、postactivate、predeactivate、postdeactivate)を定義できます$VIRTUAL_ENV/bin/
。postactivateフックが必要です。
$ 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
ます。
ln
はフルパスが好きだと言ったので試してみましたがうまくいきました 私cat
が相対パスでシンボリックリンクを試みたとき、それは言ったNo such file or directory
。
あなたは試すことができます:
export ENVVAR=value
virtualenv_root / bin / activate内。基本的に、アクティブ化スクリプトは、virtualenvの使用を開始したときに実行されるので、そこにすべてのカスタマイズを配置できます。
deactivate
関数定義virtualenv_root / bin / activateに'unset ENVVAR'を追加して、設定と設定解除のバランスを取ることもできます
(なしのみvirtualenvのを使用しvirtualenvwrapper)、環境変数を設定することによって簡単ですactivate
あなたはvirtualenvのを活性化するために調達したスクリプト。
実行:
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
}
次に、アクティブ化スクリプトの最後に変数を設定します。
# Set My Server's variables
export MY_SERVER_NAME="<domain for My Server>"
export MY_DATABASE_URL="<url for database>"
これにより、機能させるために他に何もインストールする必要deactivate
がなくなり、virtualenvを実行しても変数が残ってしまうことはありません。
virtualenv内でローカルにこれをテストするために使用できる2つの方法があります。1つは、Heroku toolbelt(https://toolbelt.heroku.com/)を介してインストールされるツールです。ツールは職長です。.envファイルにローカルに保存されているすべての環境変数をエクスポートし、Procfile内でアプリプロセスを実行します。
より軽いアプローチを探している場合の2番目の方法は、ローカルに.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