ฉันจะทำให้ uWSGI เริ่มต้นใหม่ได้อย่างไรเมื่อสคริปต์ Python ถูกปรับเปลี่ยน


38

จำไม่ได้ว่าที่ไหน แต่ฉันอ่าน uWSGI สามารถโหลดตัวเองใหม่ได้เช่นเซิร์ฟเวอร์พัฒนา Django เมื่อสคริปต์ของโครงการได้รับการแก้ไข ฉันไม่พบสิ่งนั้นในเอกสารหรือใน internets ฉันจะทำสิ่งนี้ได้อย่างไร

ฉันใช้ Ubuntu 12.04 บนเครื่องที่ใช้งานและ Debian Squeeze บนสเตจ & เซิร์ฟเวอร์ผลิต Django 1.4 และ uWSGI 1.2

คำตอบ:


39

การอ้างอิง: http://projects.unbit.it/uwsgi/wiki/Management

หากคุณเริ่มต้น uwsgi ด้วย--touch-reload=/path/to/special/file/usually/the.iniตัวเลือกการโหลด uWSGI ของคุณใหม่นั้นเป็นเรื่องง่าย ๆ ในการสัมผัสไฟล์ที่โหลดด้วย

touch /path/to/special/file/usually/the.ini

และถ้าคุณต้องการความสามารถในการ "โหลดอัตโนมัติ" นี่คือเคล็ดลับที่จะทำให้เสร็จ: http://projects.unbit.it/uwsgi/wiki/TipsAndTricks#uWSGIdjangoautoreloadmode


35

มีpy-autoreload=Nตัวเลือกในรุ่นที่ใหม่กว่าคือ เพียงตั้งค่าNความถี่ (เป็นวินาที) ของเช็ค (3 เป็นค่าที่ดี)


12
"ใช้ในการพัฒนาเท่านั้น" ตามเอกสารของ
uwsgi

4
ดูเหมือนสัมผัสโหลด = / บางไฟล์ /เป็นตัวเลือกที่ปลอดภัย
Scytale

10

หากคุณไม่ต้องการสูญเสีย django โหลดอัตโนมัติให้ลงทะเบียนวิธีการโหลดซ้ำนี้ (เช่น: ใน 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()

ตอนนี้ถ้าคุณเปลี่ยนรหัสของคุณมันจะถูกโหลดใหม่

ผู้แต่ง: Simone Federici


1
มันทำงานได้อย่างสมบูรณ์แบบ นอกจากนี้ยังเพิ่มเงื่อนไขเพื่อรับการเรียกเท่านั้นในสภาพแวดล้อมการพัฒนา
2upmedia

0

uwsgi ยังอนุญาตให้รีสตาร์ทโดยใช้ kill SIGNAL ฉันใช้มันเป็นด้านล่าง:

# 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

หากคุณเรียกใช้คำสั่งเดียวกันคุณจะเห็น child procs pid จะเปลี่ยนไปตามคำสั่งที่เกิดใหม่โดยต้นแบบ ตรวจสอบการกำหนดค่า uwsgi สำหรับการนับ master / ผู้ปฏิบัติงาน วิธีนี้ง่ายต่อการรวมเข้ากับ ansible หรือเครื่องมืออัตโนมัติอื่น ๆ เพื่อให้ง่ายต่อการใช้งานจากระยะไกล

สิ่งนี้ไม่ต้องการ proc ดั้งเดิมของคุณที่จะเริ่มต้นด้วย --touch-reload

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.