2011-03-13 3 views
0

D'abord, je vais énumérer mon environnement et de l'état:mod_wsgi ne peut pas charger mysql

Environnement:

  • Système: Mac OS 10.6
  • Python: 2.6
  • Apache: 2.2
  • mod_wsgi: 3,3
  • mysql: 5.x
  • php: 3,5
  • porteur: 0,12

Statut: je peux courir comme seul-trac serveur sans problème. Maintenant, j'intègre trac à apache, problème sortir. mod_wsgi peut exécuter une page wsgi normale correctement, mais ne peut pas charger la connexion mysql. Je l'ai testé en morceau de code, mettre "importer MySQLdb" dans la page wsgi, il ne peut toujours pas. Je peux aussi accéder par apache trac, mais il me montre Impossible de charger les liaisons Python pour MySQL

Je me réfère au journal apache:

[Sun Mar 13 13:36:44 2011] [error] [client ::1] mod_wsgi (pid=37060): Target WSGI script /Users/alex/Library/apache2/htdocs/sql.wsgi' cannot be loaded as Python module. 

[Sun Mar 13 13:36:44 2011] [error] [client ::1] mod_wsgi (pid=37060): Exception occurred processing WSGI script '/Users/alex/Library/apache2/htdocs/sql.wsgi'. 

[Sun Mar 13 13:36:44 2011] [error] [client ::1] Traceback (most recent call last): 

[Sun Mar 13 13:36:44 2011] [error] [client ::1] File "/Users/alex/Library/apache2/htdocs/sql.wsgi", line 2, in <module> 

[Sun Mar 13 13:36:44 2011] [error] [client ::1]  import MySQLdb 

[Sun Mar 13 13:36:44 2011] [error] [client ::1] File "build/bdist.macosx-10.6-universal/egg/MySQLdb/__init__.py", line 19, in <module> 

[Sun Mar 13 13:36:44 2011] [error] [client ::1] File "build/bdist.macosx-10.6-universal/egg/_mysql.py", line 7, in <module> 

[Sun Mar 13 13:36:44 2011] [error] [client ::1] File "build/bdist.macosx-10.6-universal/egg/_mysql.py", line 6, in __bootstrap__ 

[Sun Mar 13 13:36:44 2011] [error] [client ::1] ImportError: dlopen(/Users/alex/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.16.dylib 

[Sun Mar 13 13:36:44 2011] [error] [client ::1] Referenced from: /Users/alex/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so 

[Sun Mar 13 13:36:44 2011] [error] [client ::1] Reason: image not found 

[Sun Mar 13 13:36:57 2011] [error] [client ::1] mod_wsgi (pid=37061): Target WSGI script 

Cela ressemble mod_wsgi ne peut pas trouver libmysqlclient.16.dylib. Je rencontre le même problème quand j'installe mysqldb pour python, donc j'ajouter l'exportation

DYLD_LIBRARY_PATH=/Users/alex/Library/mysql-5.x/lib

SO python -c "MySQLdb import" peut fonctionner, mais mod_wsgi ne peut pas travailler. Je mis

os.environ['DYLD_LIBRARY_PATH'] = '/Users/alex/Library/mysql-5.x/lib' 

en trac.ini. Cela ne fonctionne pas pour trac dans apache encore.

Alors quelqu'un a déjà ce problème? Merci

+0

32 bits par rapport à 64 bits? voir http://code.activestate.com/pypm/mysql-python/#notes –

+0

il est 64 bits, je peux lancer python-mysql sans problème. Le problème est que le mod_wsgi ne peut pas fonctionner normalement. –

Répondre

0

Try LD_LIBRARY_PATH à la place:

export LD_LIBRARY_PATH=/usr/local/mysql/lib/mysql:$LD_LIBRARY_PATH 
+0

NON, cela ne fonctionne pas. Le python peut importer MySQLdb avec succès, mais le mod_wsgi ne le peut pas. –

+0

Juste pour info, DYLD_LIBRARY_PATH est sur MacOS ce que LD_LIBRARY_PATH est sous Linux et al. – geertjanvdk

0

Le problème est que votre Apache fonctionne 64 bits et que vous utilisez la version 32 bits de MySQL ou Apache fonctionne 32 bits et que vous êtes en utilisant la version 64 bits de MySQL. Exécutez la commande 'file' sur 'libmysqlclient.16.dylib' et elle vous indiquera pour quelles architectures il est construit. Voir des questions similaires pour l'extension Python réelle à:

http://code.google.com/p/modwsgi/wiki/InstallationOnMacOSX#Missing_Code_For_Architecture

Vous devez saisir un bien binaire de la bibliothèque MySQL ou Apache forcer à exécuter en même architecture. La documentation liée a quelques directives pour ce qui peut être fait.

+0

J'ai vérifié, les deux sont 64 bits exécutables x86_64. –

+0

En supposant que vous utilisez une version standard d'Apple Apache/Python, modifiez la question avec la commande 'fichier' pour/usr/bin/python,/usr/sbin/httpd, /Users/alex/.python-eggs/MySQL_python-1.2.3- py2.6-macosx-10.6-universal.egg-tmp/_mysql.so et libmysqlclient.16.dylib. Mieux encore, amenez-le à la liste officielle de mod_wsgi. StackOverflow est un endroit merdique pour essayer et déboguer des problèmes quand personne n'a une réponse instantanée qui fonctionne pour vous. –