Tôi đang điều hành một Hoàng đế uwsgi với nhiều chư hầu khác nhau, mỗi người phục vụ một ứng dụng Python cụ thể từ một virtualenv khác nhau. Do uwsgi được biên dịch với trình thông dịch Python 2.7 của riêng nó, nên việc thử sử dụng virtualenv với Python 3 trong đó sẽ tạo ra lỗi sau trong vassal.log:
ImportError: No module named site
Tôi tin rằng nguồn gốc của lỗi này là uwsgi đang sử dụng trình thông dịch Python 2.7 tích hợp của nó, trong khi thư mục virtualenv mà nó đang chạy chỉ hỗ trợ trình thông dịch Python 3. Thật vậy, khi tôi sử dụng một uwsgi khác (đơn giản bằng cách cài đặt nó pip install uwsgi
trong cùng một virtualenv), lỗi sẽ biến mất. Tuy nhiên, tôi muốn một Hoàng đế cai trị một số virtualenv khác nhau, vì vậy cài đặt một uwsgi riêng biệt trong mỗi không phải là một lựa chọn.
Dựa theo câu trả lời này trên Stackoverflow, The Right Way để giải quyết vấn đề này là biên dịch uwsgi với các trình thông dịch Python khác nhau dưới dạng các mô-đun có thể tải. Trước khi tôi cam kết với phương pháp này, tôi muốn biết làm thế nào tôi có thể định cấu hình cho các chư hầu của mình để mỗi người sử dụng một trình thông dịch khác.
Ngay bây giờ tôi có một Hoàng đế được bắt đầu từ /etc/rc.local với các cài đặt sau:
[uwsgi]
uid = www-data
gid = www-data
master = true
emperor = /etc/uwsgi/vassals
daemonize = /var/log/uwsgi/emperor.log
Sau đó, tôi có một loạt các chư hầu với các tệp ini như thế này:
[uwsgi]
master = false
single-interpreter = true
socket = /tmp/%n.sock
virtualenv = /home/user/.virtualenvs/djangoproject
chdir = /home/user/djangoproject
wsgi-file = project/wsgi.py
logto = /var/log/uwsgi/%n.log
Tôi không gặp vấn đề gì khi biên dịch một phiên bản tinh chỉnh của uwsgi với một số bổ trợ trình thông dịch, nhưng tôi muốn biết những gì tôi phải thay đổi trong cấu hình của mình để thực sự sử dụng các trình thông dịch riêng biệt này. Tôi chỉ có thể nói một vassal.ini:
plugin = python3.4
và trong một:
plugin = python2.7
?
Xin hãy giúp tôi tìm ra cách kết hợp các ảo ảo Python 2.7 và Python 3 dưới cùng một Hoàng đế uwsgi.
plugins=python3
hoặcplugins=python36