現在、Web プロジェクト (主に Django)で pip / virtualenv からpipenvへの切り替えを検討しています。https://kuttler.eu/en/post/django-deployments-without-downtime/で説明されているものに触発された「最小限のダウンタイム展開」プロセスを使用します
TL;DR
新しい環境を最初から作成し(新しいインタープリター、パッケージなし)、依存関係をインストールしてから、現在のディレクトリのデフォルトとして設定するpipenvコマンドはありますか?
簡単な例を見てみましょう。Debian サーバーに次の構造のプロジェクトがインストールされています。
/srv
└── project
├── .git/
├── etc/
├── sources/
├── venv_20170922/
└── venv -> venv_20170922
現在、展開する必要がある場合、Web サイトがオフラインである期間をできるだけ制限したいと考えています。私が通常従うステップのこの単純化されたビューを見てください (インデントはプロセスを理解するのを助けるためにここにあるだけです):
cd /srv/project
git pull
virtualenv -p python3 venv_20171015
source venv_20171015/bin/activate
pip install -r sources/requirements.txt
pushd sources
python manage.py migrate
python manage.py collectstatic
popd
deactivate
supervisorctl stop myproject
# Now the website is offline
ln -f -s venv_20171015 venv
supervisorctl start myproject
# Now the website is back online
このプロセスにより、Web サイトがオフラインになるのはほんの数秒で、停止、シンボリック リンクの更新、および再起動に必要な時間だけです。スーパーバイザー スクリプトは、「venv」パスに基づいて環境から gunicorn プロセスを実行します。
しかし、 pipenv で同様の動作を再現するにはどうすればよいですか? 私の知る限りpipenv
、プロジェクト フォルダー内で最初にコマンドを使用すると、その場で環境が作成されます。このような場合、この動作を微調整するコマンドはありますか?