0
J'utilise django 1.11 sur Ubuntu mais le python non-virtuel a 1.6. Il y a d'autres applications utilisant 1.6. Lorsque j'exécute mon application via apache mod_wsgi, elle utilise 1.6 au lieu de 1.11 et je récupère la trace de la pile.Django ne parvient pas à utiliser la version de django dans virutalenv
Apache conf:
WSGIPythonPath /home/wondi/envs/my_app
<VirtualHost *:80>
ServerName server.com
ServerAdmin [email protected]
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
WSGIDaemonProcess server.com processes=2 threads=15 display-name=%{GROUP}
WSGIProcessGroup server.com
WSGIPassAuthorization On
WSGIScriptAlias /my_app /home/wondi/envs/my_app/my_app/wsgi.py
<Directory "/home/wondi/envs/my_app/my_app/">
<Files wsgi.py>
Order deny,allow
Require all granted
</Files>
</Directory>
<Directory /home/wondi/envs/my_app/app/static/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
IndexOptions FancyIndexing
</Directory>
...
</VirtualHost>
my_app \ wsgi.py:
import os
import sys
from django.core.wsgi import get_wsgi_application
import site
env_path = '/home/wondi/envs/lib/python2.7/site-packages'
# we add currently directory to path and change to it
working_dir = os.path.dirname(os.path.abspath(__file__))
os.chdir(working_dir)
sys.path = [working_dir] + sys.path
# Append paths
site.addsitedir(env_path)
sys.path.append('/home/wondi/envs/')
sys.path.append('/home/wondi/envs/my_app/')
os.environ["DJANGO_SETTINGS_MODULE"] = "my_app.settings"
activate_this = "/home/wondi/envs/bin/activate_this.py"
execfile(activate_this, dict(__file__=activate_this))
application = get_wsgi_application()
Trace de la pile:
Django Version: 1.6.1
Python Version: 2.7.6
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.gis',
'django.contrib.staticfiles',
'rest_framework',
'rest_framework_gis',
'corsheaders',
'my_app']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware')
Traceback:
File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
99. resolver_match = resolver.resolve(request.path_info)
File "/usr/lib/python2.7/dist-packages/django/core/urlresolvers.py" in resolve
337. for pattern in self.url_patterns:
File "/usr/lib/python2.7/dist-packages/django/core/urlresolvers.py" in url_patterns
365. patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/usr/lib/python2.7/dist-packages/django/core/urlresolvers.py" in urlconf_module
360. self._urlconf_module = import_module(self.urlconf_name)
File "/usr/lib/python2.7/dist-packages/django/utils/importlib.py" in import_module
40. __import__(name)
File "/home/wondi/envs/my_app/my_app/urls.py" in <module>
19. from rest_framework.urlpatterns import format_suffix_patterns
File "/home/wondi/envs/lib/python2.7/site-packages/rest_framework/urlpatterns.py" in <module>
5. from rest_framework.compat import RegexURLResolver, include
File "/home/wondi/envs/lib/python2.7/site-packages/rest_framework/compat.py" in <module>
12. from django.apps import apps
Exception Type: ImportError at/
Exception Value: No module named apps
est-ther e tout ce que j'ai raté ou qui peut être fait pour résoudre le problème?
Je vous dirais devriez activerons avant de modifier virtualenv sys.path ou importer n'importe quoi. La minute où vous avez importé django.core.wsgi vous avez importé django non de votre virtualenv. Lorsque vous exécutez activate (ne devrait-il pas s'agir d'un script shell?) Vous modifiez vos variables d'environnement, en remplaçant les variables que vous avez définies. Alors essayez de réorganiser votre wsgi.py (littéralement inversé). – cowbert
Je comprends tout à fait. C'est exactement ce que vous avez dit. Il fonctionne maintenant. Pourriez-vous l'afficher comme réponse? – wondie
Lire http://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.html qui montre la façon préférée de configurer des environnements virtuels avec mod_wsgi. –