2017-07-23 1 views
0

J'essaie d'exécuter du code Django en utilisant uwsgi. Quand je suis dans le bon virtualenv, ça fonctionne bien. Mais en dehors de celui-ci, quand je le lance comme suit:Démarrer uwsgi en dehors de virtualenv

uwsgi /home/axial/axial/config.ini

Je reçois cette erreur:

[uWSGI] getting INI configuration from config.ini 
*** Starting uWSGI 2.0.15 (64bit) on [Fri Jul 7 23:34:01 2017] *** 
compiled with version: 4.2.1 Compatible FreeBSD Clang 3.8.0 (tags/RELEASE_380/final 262564) on 29 June 2017 06:51:11 
os: FreeBSD-11.1-RC1 FreeBSD 11.1-RC1 #0 r320486: Fri Jun 30 02:25:16 UTC 2017  [email protected]:/usr/obj/usr/src/sys/GENERIC 
nodename: axial 
machine: amd64 
clock source: unix 
detected number of CPU cores: 1 
current working directory: /usr/home/axial/axial 
detected binary path: /usr/local/bin/uwsgi 
!!! no internal routing support, rebuild with pcre support !!! 
*** WARNING: you are running uWSGI without its master process manager *** 
your processes number limit is 5734 
your memory page size is 4096 bytes 
detected max file descriptor number: 28467 
lock engine: POSIX semaphores 
thunder lock: disabled (you can enable it with --thunder-lock) 
uwsgi socket 0 bound to TCP address 127.0.0.1:3031 fd 3 
Python version: 2.7.13 (default, Jun 29 2017, 01:17:13) [GCC 4.2.1 Compatible FreeBSD Clang 3.8.0 (tags/RELEASE_380/final 262564)] 
Set PythonHome to /home/axial/venv/ 
ImportError: No module named site 

Mon config.ini se présente comme suit:

[uwsgi] 
socket = 127.0.0.1:3031 
wsgi-file = /home/axial/axial/axial/wsgi.py 
workers = 10 
virtualenv = /home/axial/venv/ 
pythonpath = /home/axial/venv/bin/python3 
#home = /home/axial/venv/ 
#chdir = /home/axial/venv/ 

Lorsque dans le virtualenv , Il n'y a pas de problème. Mais je pensais que spécifier le virtualenv dans le config.ini permettrait de résoudre ce problème? Qu'est-ce qui cause ça?

Ceci est sur FreeBSD. Note latérale:/home/axial (répertoire de l'utilisateur), le répertoire 'axial' suivant est le répertoire racine source, le répertoire 'axial' suivant est le répertoire de l'application qui contient le fichier wsgi.py.

+0

Que voulez-vous dire par "dans virtualenv"? Et quel est le chemin vers le module 'site'? –

+0

Sergey, je ne suis pas certain, en fait. Je n'ai pas cela dans mon requirements.txt, qui a été généré par pip. Ai-je besoin d'ajouter manuellement ceci dans le virtualenv? Mon objectif plus large est d'avoir uwsgi au démarrage du système, et peut-être même être un script FreeBSD rc. –

+0

Puisque je ne comprends pas ce qu'est le module 'site' dans la structure de votre projet, je ne peux que vous suggérer de l'ajouter à python' PATH' afin que python sache comment trouver votre module et le charger correctement. Vous pouvez le faire de différentes façons - par exemple, installez le module 'site' en tant que paquet sous virtualenv si vous avez déjà setup.py ou ajoutez le chemin de ce module à la variable' PATH'. –

Répondre

0

Travis, très similaire. Le problème était python2 vs python3, mais cette solution ne semblait pas fonctionner.

Actuellement, uwsgi sur FreeBSD utilise par défaut python2. Vous devez le recompiler depuis les ports. Je Régler dans /etc/make.conf:

PYTHON_VERSION=python3.6 
PYTHON_VERSION_MINIMUM=3.6 
DEFAULT_VERSIONS=python=python3.6 python2=2.7 python3=3.6 

Puis j'ai fait

cd /usr/ports/www/uwsgi && make install clean 

et cela a fonctionné!

0

Il semble que vous utilisez Python 2,7

Python version: 2.7.13 (default, Jun 29 2017, 01:17:13) [GCC 4.2.1 Compatible 
FreeBSD Clang 3.8.0 (tags/RELEASE_380/final 262564)] 

mais votre uwsgi révélateur de chercher Python 3

pythonpath = /home/axial/venv/bin/python3 

Je ne suis pas positif cela va résoudre tous vos problèmes (comme je suis aussi difficile de faire travailler uwsgi en dehors de l'environnement virtuel) mais c'est un bon endroit pour commencer

Vous pouvez également essayer d'appeler le binaire uwsgi de l'environnement virtuel

/home/axial/venv/bin/uwsgi --ini /home/axial/axial/config.ini