2017-02-15 1 views
0

J'ai mis en place une application flask fonctionnant avec Apache 2.4, mod wsgi, python 2.7 sur un mac mini. Il sert des données utiles que mon équipe utilise pour surveiller notre projet.Obtention de Django Apache Mysql WSGI en utilisant un virtualenv python 3.4 sur une machine avec une application flacon pré-existante fonctionnant sous le global python2.7

J'ai récemment développé une application Django avec un back-end de base de données MySQL qui fonctionne très bien sous le serveur de test dans un environnement virtuel python 3.4 avec Django 1.10 et PyMySQL et mysqlclient installés par pip mais je ne peux pas travailler sous apache.

Mon Apache configuration du serveur virtuel est comme suit:

WSGIScriptReloading On 

    <VirtualHost *> 
     ServerName <server_name> 
     ServerAlias <project_name> 
     ServerAdmin <myEmail> 
     LogLevel info 

     # This is the WSGI daemon process for the existing python 2.7/flask project 
     # Even if I comment this bit out, the Django project still won't work 
     WSGIDaemonProcess theApp user=_www group=staff threads=5 
     WSGIScriptAlias /app1 /path/to/theApp/apache/wsgi.py 
     <Directory "/path/to/theApp/apache"> 
      WSGIProcessGroup app1 
      WSGIApplicationGroup %{GLOBAL} 
      <Files wsgi.py> 
       Require all granted 
      </Files> 
     </Directory> 

     # This is the WSGI daemon process for my django app - I've anonymised it 
     # a bit but I am confident the paths used are correct 

     WSGIDaemonProcess djangoApp user=_www group=staff processes=2 threads=15 python-path=/path/to/djangoApp:/path/to/virtualenvs/env34 display-name=%{GROUP} 
     WSGIProcessGroup djangoApp 
     WSGIApplicationGroup %{GLOBAL} 
     WSGIScriptAlias /djangoApp /path/to/djangoApp/djangoApp/wsgi.py 
     <Directory /path/to/djangoApp/djangoApp> 
       <Files wsgi.py> 
        Require all granted 
       </Files> 
     </Directory> 

    </VirtualHost> 

Il y a une ligne dans le httpd.conf:

LoadModule wsgi_module /Library/Python/2.7/site-packages/mod_wsgi/server/mod_wsgi-py27.so 

remplaçant par la ligne suivante:

LoadModule wsgi_module /path/to/.virtualenvs/env34/lib/python3.4/site-packages/mod_wsgi/server/mod_wsgi-py34.so 

Rompre l'application python 2.7/Flask existante et ne corrige pas mon application Django

Le journal des erreurs Apache a quelques erreurs notables:

'/path/to/djangoApp/djangoApp/wsgi.py' cannot be loaded as Python module. 

ImportError: No module named django.core.wsgi 

donc, de regarder d'autres questions que j'ai l'impression qu'il ya un problème en cours d'exécution de l'application à base de python3.4 et wsgi compilé pour Python 2.7 mais étant donné que cette application fonctionne très bien sous le serveur de test django et l'environnement virtuel, je ne peux pas m'empêcher de penser qu'il doit y avoir un moyen de l'implémenter sous le serveur de production.

Un grand merci pour toute aide

PJ

Répondre

0

Lire:

Vous devriez éviter d'utiliser python-path de se référer à l'environnement virtuel Python. Pour la façon dont vous essayez d'utiliser python-path cela ne fonctionnera pas comme donnant le mauvais chemin.

+0

Merci beaucoup Graham. En lisant ceci, j'ai l'impression que je ne peux utiliser qu'un mod_wsgi compilé pour une version de Python et que je devrais donc mettre à jour mon projet flask existant vers python 3 pour que lui et mon nouveau projet Django puissent vivre ensemble. . . avec le tri du bit python-path. c'est-à-dire que cela fonctionne sous apache, il ne peut y avoir qu'une seule version python utilisée pour les applications fonctionnant sous mod_wsgi. Tout à fait content de le faire, le module et toute la documentation qui va avec sont très bien! – pjmnoble

+0

L'autre option consiste à utiliser '' mod_wsgi-express'' et à avoir des instances distinctes derrière un proxy. Voir https://pypi.python.org/pypi/mod_wsgi et les détails sur les proxys à http://blog.dscpl.com.au/2015/06/proxying-to-python-web-application.html et http://blog.dscpl.com.au/2015/07/redirection-problems-when-proxying-to.html Juste ignorer qu'il parle de Docker. –

+0

Pure pure brilliant - les deux sites sont opérationnels! – pjmnoble