Bagaimana cara membuat uWSGI me-restart ketika skrip Python dimodifikasi?

38

Tidak ingat di mana, tetapi saya membaca uWSGI dapat memuat ulang dirinya sendiri seperti server pengembangan Django ketika skrip proyek dimodifikasi. Saya tidak dapat menemukan itu di dokumen , atau di internet. Bagaimana saya bisa melakukan ini?

Saya menggunakan Ubuntu 12.04 pada mesin kerja saya dan Debian Squeeze di server panggung & produksi, Django 1.4 dan uWSGI 1.2.

culebrón
sumber

Jawaban:

35

Ada py-autoreload=Nopsi dalam rilis yang lebih baru. Atur saja Nke frekuensi (dalam detik) pemeriksaan (3 adalah nilai yang baik).

roberto
sumber
12
"gunakan hanya dalam pengembangan" menurut uwsgi docs
scytale
4
sepertinya touch-reload = / some / file adalah opsi yang lebih aman
scytale
10

Jika Anda tidak ingin kehilangan autoreload django, daftarkan metode reload ini (yaitu: di settings.py):

import uwsgi
from uwsgidecorators import timer
from django.utils import autoreload

@timer(3)
def change_code_gracefull_reload(sig):
    if autoreload.code_changed():
        uwsgi.reload()

Sekarang jika Anda mengubah kode Anda akan dimuat ulang.

Penulis: Simone Federici

BorisHajduk
sumber
1
Ini bekerja dengan sempurna. Juga menambahkan persyaratan sehingga ini hanya dipanggil di lingkungan pengembangan.
2upmedia
0

uwsgi juga memungkinkan restart menggunakan kill SIGNAL. Saya menggunakannya sebagai berikut:

# ps -efa | grep uwsgi | grep prod
app  13390 13383  0 07:40 ?        00:00:00 /usr/local/bin/uwsgi --ini /etc/uwsgi/apps-enabled/app_prod.ini
app  13417 13390  0 07:40 ?        00:00:00 /usr/local/bin/uwsgi --ini /etc/uwsgi/apps-enabled/app_prod.ini
app  13419 13390  0 07:40 ?        00:00:00 /usr/local/bin/uwsgi --ini /etc/uwsgi/apps-enabled/app_prod.ini
# kill -HUP 13390

Jika Anda menjalankan perintah yang sama, Anda akan melihat pid prok anak akan diubah saat mereka dilahirkan kembali oleh master. Juga periksa konfigurasi uwsgi untuk jumlah master / pekerja proc. Metode ini mudah diintegrasikan dengan alat otomatisasi yang mungkin atau lainnya sehingga mudah digunakan untuk jarak jauh.

Ini tidak perlu proses awal untuk memulai dengan --touch-reload.

mrtipale
sumber