最後に、開発環境をrunserverからgunicorn / nginxに移行しました。
runserverのオートリロード機能をgunicornに複製すると、ソースが変更されたときにサーバーが自動的に再起動するので便利です。そうでない場合は、を使用してサーバーを手動で再起動する必要がありkill -HUP
ます。
手動による再起動を回避する方法はありますか?
最後に、開発環境をrunserverからgunicorn / nginxに移行しました。
runserverのオートリロード機能をgunicornに複製すると、ソースが変更されたときにサーバーが自動的に再起動するので便利です。そうでない場合は、を使用してサーバーを手動で再起動する必要がありkill -HUP
ます。
手動による再起動を回避する方法はありますか?
回答:
これは古い質問ですが、一貫性のためです-バージョン19.0以降、gunicornには--reload
オプションがあります。したがって、サードパーティのツールはこれ以上必要ありません。
killall -HUP procname
正常に動作します)を送信して新しいワーカーを開始し、古いワーカーを正常にシャットダウンするように言われています。
1つのオプションは、起動オプションに追加することにより、--max-requestsを使用して、生成された各プロセスを1つの要求のみを処理するように制限すること--max-requests 1
です。新しく生成されたすべてのプロセスはコードの変更を認識し、開発環境では、リクエストごとの余分な起動時間はごくわずかです。
pip
有能なパッケージを必要とするにもかかわらず、より良いwatchdog
です。
Bryan Helmigがこれを思いついたので、直接run_gunicorn
起動する代わりに使用するように変更gunicorn
し、djangoプロジェクトのルートフォルダー(virtualenvがアクティブ化されている)のシェルにこれらの3つのコマンドをカットアンドペーストできるようにしました。
pip install watchdog -U
watchmedo shell-command --patterns="*.py;*.html;*.css;*.js" --recursive --command='echo "${watch_src_path}" && kill -HUP `cat gunicorn.pid`' . &
python manage.py run_gunicorn 127.0.0.1:80 --pid=gunicorn.pid
127.0.0.1:80
必要に応じて、の代わりにIPまたはFQDNとポートを配置することを忘れないでください。
settings.py
、models.py
(移行が必要)、またはない私の中にいくつかの外部アプリのソースコードwatchmedo
パターン。
git pushを使用して本番環境にデプロイし、gitフックを設定してスクリプトを実行します。このアプローチの利点は、移行とパッケージのインストールを同時に実行できることです。 https://mikeeverhart.net/2013/01/using-git-to-deploy-code/
mkdir -p /home/git/project_name.git
cd /home/git/project_name.git
git init --bare
次に、スクリプトを作成します/home/git/project_name.git/hooks/post-receive
。
#!/bin/bash
GIT_WORK_TREE=/path/to/project git checkout -f
source /path/to/virtualenv/activate
pip install -r /path/to/project/requirements.txt
python /path/to/project/manage.py migrate
sudo supervisorctl restart project_name
を確認しchmod u+x post-receive
、ユーザーをsudoersに追加してください。sudo supervisorctl
パスワードなしで実行できるようにします。 https://www.cyberciti.biz/faq/linux-unix-running-sudo-command-without-a-password/
ローカル/開発サーバーgit remote
から、本番サーバーにプッシュできるように設定しました
git remote add production ssh://user_name@production-server/home/git/project_name.git
# initial push
git push production +master:refs/heads/master
# subsequent push
git push production master
おまけとして、スクリプトの実行中にすべてのプロンプトが表示されます。移行/パッケージのインストール/スーパーバイザの再起動に問題がないかどうかを確認します。
#!/bin/bash
上記のようにシバンを使用することに注意してください。 代わりに#!/bin/sh
Gitのpost-receive
例が使用していました。
kill -HUP
はプロセスPIDではなく、代わりにsupervisorctlを使用します。ただし、これが大きく変わるとは思わないでください。