2017-10-05 12 views
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?

+0

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

+0

Je comprends tout à fait. C'est exactement ce que vous avez dit. Il fonctionne maintenant. Pourriez-vous l'afficher comme réponse? – wondie

+2

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. –

Répondre