最後に、開発環境をrunserverからgunicorn/nginxに移行しました。
Runserverの自動リロード機能をgunicornに複製すると、ソースが変更されたときにサーバーが自動的に再起動するので便利です。それ以外の場合は、kill -HUP
を使用してサーバーを手動で再起動する必要があります。
手動での再起動を回避する方法はありますか?
これは古い質問ですが、一貫性のためだけに-バージョン19.0からgunicornには --reload
オプション。したがって、サードパーティ製のツールにこれ以上必要なものはありません。
1つのオプションは、 -max-requests を使用して、起動オプションに--max-requests 1
を追加することにより、生成された各プロセスが1つの要求のみを処理するように制限することです。新しく生成されるプロセスはすべて、コードの変更を確認する必要があり、開発環境では、リクエストごとの余分な起動時間はごくわずかです。
Bryan Helmig これを思いつき、run_gunicorn
直接gunicorn
を起動する代わりに、これらの3つのコマンドをDjangoプロジェクトのルートフォルダーがアクティブになっている)のシェルにカットアンドペーストできるようにします。
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
私は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
おまけとして、スクリプトの実行中にすべてのプロンプトが表示されます。そのため、移行/パッケージのインストール/スーパーバイザーの再起動に問題があるかどうかがわかります。