2017-02-21 3 views
1

Système d'exploitation - Ubuntu Server 14.04 sur Azure VMapache2 se bloque mod_wsgi lors de l'importation pyodbc

Essayé avec différentes versions de python (3.6.0), 3.4.3, apache et mod_wsgi.

Pilote ODBC natif MS installé en utilisant les instructions d'ici https://gist.github.com/joecampo/6f777a659b8132b9d6fe1c3589df394c, alors que pyodbc a été installé en utilisant pip.

Pour déboguer le wsgi_module j'ai mis en place l'application django pour fonctionner en mode embarqué et:

gdb /usr/local/apache2/bin/httpd 
run -X 

Quand j'accéder à une fonction qui importe pyodbc, le wsgi échoue avec l'erreur suivante:

Program received signal SIGSEGV, Segmentation fault. 
import_types() at src/pyodbcmodule.cpp:223 
223 src/pyodbcmodule.cpp: No such file or directory. 

Module Importation fonctionne très bien quand je lance l'application django de la ligne de commande:

python3 manage.py runserver 

Y a-t-il une solution de contournement?

+0

Lorsque vous exécutez localement, vous pouvez être dépendant de LD_LIBRARY_PATH' étant défini pour trouver une bibliothèque partagée. Cette variable d'environnement ne sera pas définie pour mod_wsgi et vous ne pouvez pas la définir facilement pour qu'elle soit utilisée. Qu'est-ce que '' LD_LIBRARY_PATH'' dans votre environnement local? –

+0

J'ai essayé de 'echo $ LD_LIBRARY_PATH' ou d'exécuter' env'. Aucun n'a rien retourné. Si j'avais su ce que la bibliothèque mod_wsgi ne trouvait pas, je pourrais créer un lien logiciel dans/usr/lib. Y a-t-il un moyen de le comprendre? – Vahagn

+0

Si l'ensemble '' LD_LIBRARY_PATH'' n'est pas défini, il est peu probable que cela soit la cause. Définissez-vous WSGIApplicationGroup% {GLOBAL} ''? Le module que vous utilisez peut ne pas fonctionner dans les sous-interpréteurs Python et se bloque. Cette directive force l'utilisation de l'interpréteur principal, ce qui ressemble davantage à ce que voient les modules lors de l'utilisation de la ligne de commande Python. Nous vous recommandons également d'utiliser le mode démon de mod_wsgi si vous ne l'utilisez pas déjà. –

Répondre

0

J'ai rencontré le même problème lors de la configuration d'un projet Python Pyramid, et rétrogradant vers une version précédente de pyodbc l'a corrigé.

Il semble que cela puisse être un bug dans pyodbc ou le module WSGI. Voir pyodbc 4.0.9+ segfault with uwsgi #199. Vous savez sans doute déjà que cette ligne est un hareng rouge:

223 src/pyodbcmodule.cpp: No such file or directory. 

Cette erreur provient du débogueur et dit exactement où dans import_types() l'exception a été soulevée, mais la recherche de ce fichier m'a conduit à ce bug rapport sur GitHub.

Vous savez évidemment déjà comment déboguer Apache et wsgi, mais pour ceux qui ne le font pas, il existe des instructions détaillées here.

0

Cela a été corrigé en 4.0.16 en ajoutant la prise en charge des sous-interpréteurs.