Akhirnya saya memigrasikan env pengembangan saya dari runserver ke gunicorn / nginx.
Akan lebih mudah untuk mereplikasi fitur autoreload runserver ke gunicorn, sehingga server secara otomatis memulai ulang ketika sumber berubah. Jika tidak, saya harus me-restart server secara manual dengan kill -HUP
.
Adakah cara untuk menghindari restart manual?
kill -HUP
- benar memproses PID, tetapi gunakan supervisorctl sebagai gantinya. Namun, jangan berpikir ini banyak berubah.Jawaban:
Meskipun ini pertanyaan lama, hanya untuk konsistensi - karena versi 19.0 gunicorn memiliki
--reload
opsi. Jadi tidak ada alat pihak ketiga yang membutuhkan lebih banyak.sumber
killall -HUP procname
akan berfungsi dengan baik) agar pekerja baru dimulai dan yang lama ditutup dengan baik.Salah satu opsinya adalah menggunakan --max-request untuk membatasi setiap proses yang muncul untuk melayani hanya satu permintaan dengan menambahkan
--max-requests 1
ke opsi startup. Setiap proses yang baru muncul akan melihat kode Anda berubah dan dalam lingkungan pengembangan waktu startup tambahan per permintaan harus dapat diabaikan.sumber
pip
paket yang mampuwatchdog
,.Bryan Helmig datang dengan ini dan saya memodifikasinya untuk digunakan
run_gunicorn
daripada meluncurkangunicorn
secara langsung, untuk memungkinkan untuk hanya memotong dan menempelkan 3 perintah ini ke dalam shell di folder root proyek django Anda (dengan virtualenv Anda diaktifkan):sumber
127.0.0.1:80
, jika perlu.settings.py
,models.py
(diperlukan migrasi), atau kode sumber dari beberapa aplikasi eksternal tidak ada dalamwatchmedo
pola saya .Saya menggunakan git push untuk menerapkan ke produksi dan menyiapkan git hook untuk menjalankan skrip. Keuntungan dari pendekatan ini adalah Anda juga dapat melakukan migrasi dan penginstalan paket secara bersamaan. https://mikeeverhart.net/2013/01/using-git-to-deploy-code/
Kemudian buat skrip
/home/git/project_name.git/hooks/post-receive
.Pastikan untuk
chmod u+x post-receive
, dan tambahkan pengguna ke sudoers. Biarkan berjalansudo supervisorctl
tanpa kata sandi. https://www.cyberciti.biz/faq/linux-unix-running-sudo-command-without-a-password/Dari server lokal / pengembangan saya, saya menyiapkan
git remote
yang memungkinkan saya untuk mendorong ke server produksiSebagai bonus, Anda akan melihat semua petunjuk saat skrip sedang berjalan. Jadi Anda akan melihat apakah ada masalah dengan migrasi / instalasi paket / pengawas restart.
sumber
#!/bin/bash
seperti yang disebutkan di atas alih-alih#!/bin/sh
yang merupakanpost-receive
contoh Git !