2011-03-13 10 views
0

首先,我會列出我的環境和狀態:的mod_wsgi無法加載mysql的

環境:

  • 系統:Mac OS 10.6
  • 的Python:2.6
  • 阿帕奇:2.2
  • mod_wsgi的: 3.3
  • mysql:5.x
  • php:3.5
  • TRAC:0.12

狀態: 我可以毫無問題地運行TRAC作爲單獨的服務器。 現在我整合了trac到apache,問題出來了。 mod_wsgi可以正常運行正常的wsgi頁面,但無法加載mysql連接。我在一段代碼中測試它,在wsgi頁面中輸入「import MySQLdb」,它仍然不能。我還可以通過Apache訪問TRAC,但它表明我無法加載Python綁定的MySQL

我指的是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 

這看起來像mod_wsgi的找不到libmysqlclient.16.dylib。我遇到類似的問題,當我安裝MySQLdb的Python的,所以我加出口

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

所以Python -c「進口MySQLdb的」可以工作,但mod_wsgi的不能工作。 所以我把

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

到trac.ini。 它仍然不適用於apache中的trac。

因此,任何人都有這個問題嗎? 感謝

+0

32位和64位?看到http://code.activestate.com/pypm/mysql-python/#notes – 2011-03-13 22:46:01

+0

它是64位,我可以運行python-mysql沒有問題。問題是mod_wsgi無法正常工作。 – 2011-03-13 23:29:08

回答

0

嘗試LD_LIBRARY_PATH代替:

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

不,它不起作用。 python可以成功導入MySQLdb,但mod_wsgi不能。 – 2011-03-13 23:27:57

+0

僅供參考,DYLD_LIBRARY_PATH在MacOS上,Linux等人的LD_LIBRARY_PATH是什麼。 – geertjanvdk 2011-03-16 22:18:09

0

的問題是,你的Apache運行64位和你正在使用MySQL的32位版本,或Apache運行32位和你使用64位版本的MySQL。

在'libmysqlclient.16.dylib'上運行'file'命令,它會告訴你它的內部結構。看到類似的問題在實際的Python擴展:

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

你需要得到一個遠MySQL庫二進制的保持或強制Apache在運行爲相同的架構。鏈接的文檔對於可以完成的工作有一些指導。

+0

我檢查過了,它們都是64位可執行文件x86_64。 – 2011-03-14 16:18:08

+0

假設您正在運行標準的Apple Apache/Python修正問題,輸出/ usr/bin/python的'file'命令,/ usr/sbin/httpd,/Users/alex/.python-eggs/MySQL_python-1.2.3- py2.6-macosx-10.6-universal.egg-tmp/_mysql.so和libmysqlclient.16.dylib。更好的是,把它交給官方的mod_wsgi列表。當沒有人能夠立即回答您的問題時,StackOverflow是一個糟糕的地方,可以嘗試和調試問題。 – 2011-03-15 17:44:45