เดินสาย uWSGI เพื่อทำงานกับ Django และ nginx บน Ubuntu 16.04


14

ฉันพยายามที่จะปฏิบัติตามการกวดวิชานี้จะติดตั้งuWSGIด้วยDjangoและบนnginxUbuntu16.04

มันทำงานได้ดีจนกระทั่งขั้นตอนสุดท้าย (โอ้ประชด ... ) ที่ฉันพยายามใช้คำสั่งนี้:

sudo service uwsgi start

หากล้มเหลวด้วยข้อผิดพลาดต่อไปนี้:

ไม่สามารถเริ่ม uwsgi.service: ไม่พบหน่วย uwsgi.service

คนอื่น ๆ ดูเหมือนจะได้รับข้อผิดพลาดที่คล้ายกัน:

ไม่สามารถเริ่ม uwsgi.service: หน่วย uwsgi.service ไม่สามารถโหลดได้: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว

ดูเหมือนว่าปัญหาจะเกี่ยวข้องกับเวอร์ชันของ Ubuntu ในขณะที่การกวดวิชาที่มุ่งเป้าไปที่อูบุนตู 14.04 ดูเหมือนว่ามันจะไม่ทำงานสำหรับรุ่นใหม่เพราะในรุ่น 15 Ubuntu เปลี่ยนจากupstartภูต init กับsystemdภูต init

ฉันsystemdจะใช้เพื่อเรียกใช้ uWSGI เพื่อให้ทำงานกับ nginx และ Django ได้อย่างไร

คำตอบ:


27

การแก้ไขครั้งแรกที่จำเป็นคือ/etc/uwsgi/sites/firstsite.iniไฟล์ สิ่งเดียวที่เปลี่ยนแปลงจำเป็นต้องมีการเปลี่ยนสิทธิ์จากการ664 666สคริปต์จะมีลักษณะเช่นนี้:

[uwsgi]
project = firstsite
base = /home/user

chdir = %(base)/%(project)
home = %(base)/Env/%(project)
module = %(project).wsgi:application

master = true
processes = 5

socket = %(base)/%(project)/%(project).sock
chmod-socket = 666
vacuum = true

ประการที่สองเมื่อเราใช้งานsystemdมากกว่าupstartไฟล์ต่อไปนี้ไม่จำเป็นและสามารถลบออกได้:/etc/init/uwsgi.conf

ประการที่สามเราสร้างsystemdสคริปต์ต่อไปนี้ที่/etc/systemd/system/uwsgi.service:

[Unit]
Description=uWSGI Emperor service
After=syslog.target

[Service]
ExecStart=/usr/local/bin/uwsgi --emperor /etc/uwsgi/sites
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all

[Install]
WantedBy=multi-user.target

รีเฟรชสถานะของระบบ systemd init ด้วยบริการ uWSGI ใหม่นี้บนเครื่อง

sudo systemctl daemon-reload

ในการเริ่มต้นสคริปต์คุณจะต้องเรียกใช้สิ่งต่อไปนี้:

sudo systemctl start uwsgi

ในการเริ่มต้นuWSGIใหม่คุณจะต้อง:

sudo systemctl enable uwsgi

คุณสามารถใช้สิ่งต่อไปนี้เพื่อตรวจสอบสถานะ:

systemctl status uwsgi

บางรายละเอียดเพิ่มเติมสามารถพบได้ที่นี่


1
คุณจะทำให้ systemd ใช้ python virtualenv ได้อย่างไร? เมื่อฉันเรียกฉันได้รับsystemctl status uwsgi ImportError: No module named site
tlng05

2
มหากาพย์ ..... ฉันดิ้นรนมานานด้วยสิ่งนี้ .... ขอบคุณสำหรับวิธีการแก้ปัญหาทีละขั้นตอนอย่างง่ายตรงไปตรงมาที่คุณเขียนที่นี่ +1
Rakib

1
ฉันใช้มันสองสามครั้งคำตอบที่เป็นประโยชน์มาก
jozi

0

หากต้องการแก้ไขข้อผิดพลาด: ให้โหลดไฟล์ uwsgi.service ที่sudo systemctl daemon-reloadสร้างขึ้นใหม่

เพื่อให้บริการเริ่มต้นในการรีบูตแต่ละครั้ง: sudo systemctl enable uwsgi.

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