Question

OK, donc je l'ai essayé avec et sans virtualenv:

uwsgi --home /home/auston/new_proj/ --socket /tmp/uwsgi2.sock --chmod-socket --module app_wsgi --pp /home/auston/new_proj/nikeshere --logto /tmp/uwsgi.log --master --processes 4 -P

Quasiment peu importe quoi, je reçois ceci:

*** Starting uWSGI 0.9.6.5 (32bit) on [Thu Oct 21 08:05:44 2010] ***
compiled with version: 4.4.3
Python version: 2.6.6 (r266:84292, Oct 21 2010, 04:07:38)
[GCC 4.4.3]
your memory page size is 4096 bytes
allocated 412 bytes (0 KB) for 1 request's buffer.
Setting PythonHome to /home/auston/new_proj/...
binding on UNIX socket: /tmp/uwsgi2.sock
chmod() socket to 666 for lazy and brave users
your server socket listen backlog is limited to 64 connections
added /home/auston/new_proj/nikeshere to pythonpath.
initializing hooks...done.
['/home/auston/new_proj/nikeshere', '.', '', '/home/auston/new_proj/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg', '/home/auston/new_proj/lib/python2.6/site-packages/pip-0.8.1-py2.6.egg', '/home/auston/new_proj/lib/python26.zip', '/home/auston/new_proj/lib/python2.6', '/home/auston/new_proj/lib/python2.6/plat-linux2', '/home/auston/new_proj/lib/python2.6/lib-tk', '/home/auston/new_proj/lib/python2.6/lib-old', '/home/auston/new_proj/lib/python2.6/lib-dynload', '/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk', '/home/auston/new_proj/lib/python2.6/site-packages', '/usr/local/lib/python2.6/dist-packages/pip-0.8.1-py2.6.egg', '/usr/local/lib/python2.6/site-packages', '/usr/local/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages', '/home/auston/new_proj/nikeshere', '/usr/local/lib/python2.6']
Traceback (most recent call last):
  File "/home/auston/new_proj/nikeshere/app_wsgi.py", line 11, in <module>
    import django.core.handlers.wsgi
  File "/usr/local/lib/python2.6/site-packages/django/core/handlers/wsgi.py", line 1, in <module>
    from threading import Lock
  File "/usr/lib/python2.6/threading.py", line 13, in <module>
    from functools import wraps
  File "/usr/lib/python2.6/functools.py", line 10, in <module>
    from _functools import partial, reduce
ImportError: No module named _functools

Si je change --home à /usr/local/lib/python/2.6 je reçois échouer sur mon importation app_wsgi.py d'os. Ici, il est, au-dessous, juste au cas où:

import sys
import os

sys.path.append(os.path.abspath(os.path.dirname(__file__)))

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

Essentiellement, je vous demande, comment puis-je uwsgi reconnaître functools ou se concentrer sur le droit chemin (chemin est en sortie ci-dessus). Je vous serais reconnaissant toute aide que vous pouvez donner les gars !!

P.S. Ubuntu 10.04 - uwsgi 0.9.6.5 - Nginx 0.8.53 - env ??virtuel Python 2.6.5 - "régulière (ou système)" Python 2.6.6 - Django 1.2.3

Mise à jour:

j'ai pu uwsgi arriver à commencer à accepter des demandes si j'omettent le « --module » comme ceci:

uwsgi --home /home/auston/new_proj --socket /tmp/uwsgi2.sock --chmod-socket --pp /home/auston/new_proj/nikeshere --logto /tmp/uwsgi.log --master --processes 4 -P

mais maintenant je reçois une application non trouvée erreur:

"Erreur uwsgi application wsgi not found "

Je suis plus proche, mais je voudrais encore apprécier des suggestions que l'application ne se trouve pas parce que je ne peux pas inclure le module nécessaire pour le charger!

Était-ce utile?

La solution

Donc, comme indiqué plus haut, le problème a été avec le PYTHONPATH et ce de l'incapacité de trouver un module _functools nommé.

Apparemment, _functools est un module c & I nécessaire pour ajouter le Chemin d'accès de la PYTHONPATH afin qu'il soit trouvé, de sorte que la différence par rapport à l'wsgi.py d'origine, est maintenant:

import sys
sys.path.append('/usr/local/lib/python2.6/lib-dynload') # to load _functools
sys.path.append('/usr/local/lib/python2.6/site-packages') # to load django
sys.path.append('/usr/local/lib/python2.6/dist-packages') # cautionary to load django
sys.path.append('/usr/lib/python2.6') # to load os
import os

os.environ['DJANGO_SETTINGS_MODULE'] = 'iwin.settings'

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

Très hacky, mais cela fonctionne pour l'instant ...

Autres conseils

Je sais que ce vieux sujet et les versions de blocs de construction pile changé, mais j'ai eu le même problème avec ne pas reconnaître sous uwsgi installé libs dans virtualenv. La solution est de paramètre de point d'origine pour virtualenv, comme indiqué ci-dessous (extrait de https: / /uwsgi.readthedocs.org/en/latest/tutorials/Django_and_nginx.html ).

Donc pour moi commande:

uwsgi --http :8000 --module ii.wsgi --home /home/dev/.virtualenvs/ii_env/

travaillé, tout en étant dans la demande de django (ii) le répertoire.

# mysite_uwsgi.ini file
[uwsgi]

# Django-related settings
# the base directory (full path)
chdir           = /path/to/your/project
# Django's wsgi file
module          = project.wsgi
# the virtualenv (full path)
home            = /path/to/virtualenv

# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 10
# the socket (use the full path to be safe
socket          = /path/to/your/project/mysite.sock
# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true

Consultez http://blog.zacharyvoase.com/2010 / 03/05 / django-uwsgi-nginx / . Il utilise jeu très similaire vers le haut.

J'ai eu problème très similaire et je l'ai trouvé ceci:

Lorsque vous installez virtuelenv, il installe 'la bibliothèque standard de Python en créant des liens symboliques à l'original (en) comme /usr/lib/python2.7. Mais lorsque vous vérifiez votre virtualenv répertoire Python lib, il y a des liens symboliques créés pour seulement quelques bibliothèques de base. Votre functools est probablement pas parmi eux.

Donc, la solution est de créer le lien symbolique manuellement. Il est un PITA, parce que vous pourriez avoir à créer beaucoup de liens symboliques, mais il semble comme une solution propre pour moi. Vous ne devez pas pirater des fichiers source et il est transparent.

Le lien symbolique doit être créé pas à la racine du venv_directory, mais par exemple.

venv_directory/lib/python2.7/site-packages/

Je espère que ça fonctionne pour vous!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top