Я пытаюсь запустить django на osx 10.7 (лев) с apache mod_wsgi и virtualenv.
Мой сайт работает, если я использую сервер тестирования django:
(baseline)otter:hello mathew$ python manage.py runserver
но это не работает, когда я запускаю apache. Ядро ошибки, похоже,
Library not loaded: libmysqlclient.16.dylib
Я думаю, что это связано с путем, который Apache использует для поиска libmysqlclient.16.dylib
когда я запускаю otool в каталоге lib, он выглядит хорошо
otter:lib mathew$ pwd
/usr/local/mysql/lib
otter:lib mathew$ otool -L libmysqlclient.16.dylib
libmysqlclient.16.dylib:
libmysqlclient.16.dylib (compatibility version 16.0.0, current version 16.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.0.1)
но снаружи не может его найти
otter:lib mathew$ cd /
otter:/ mathew$ otool -L libmysqlclient.16.dylib
otool: can't open file: libmysqlclient.16.dylib (No such file or directory)
если я вручную установил DYLD_LIBRARY_PATH otool работает
выдра: lib mathew $ DYLD_LIBRARY_PATH = / usr / local / mysql / lib выдра: lib
Мэтью $ otool -L libmysqlclient.16.dylib libmysqlclient.16.dylib:
libmysqlclient.16.dylib (версия совместимости 16.0.0, текущая
версия 16.0.0) /usr/lib/libSystem.B.dylib (версия совместимости
1.0.0, текущая версия 125.0.1)
Когда я запускаю сервер тестирования django, мой .bash_profile устанавливает virtualenv и путь к динамической библиотеке mysql
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/:$DYLD_LIBRARY_PATH
export PATH
Когда я запускаю apache, он находит мои пути к virtualenv, но, похоже, он не находит путь к динамической библиотеке.
Я попытался добавить этот путь в / usr / sbin / envvars
DYLD_LIBRARY_PATH="/usr/lib:/usr/local/mysql/lib:$DYLD_LIBRARY_PATH"
export DYLD_LIBRARY_PATH
и /private/etc/paths.d/libmysql
/usr/local/mysql/lib
затем перезагрузил машину
но это не изменило сообщение об ошибке.
Error loading MySQLdb module: dlopen(/usr/local/python_virtualenv/baseline/lib/python2.7/site-packages/_mysql.so,
2):
Библиотека не загружена: libmysqlclient.16.dylib
Не думаю, что это проблема с разрешениями:
-rwxr-xr-x 1 root wheel 3787328 4 Dec 2010 libmysqlclient.16.dylib
drwxr-xr-x 39 root wheel 1394 18 Nov 21:07 /
drwxr-xr-x@ 15 root wheel 510 24 Oct 22:10 /usr
drwxrwxr-x 20 root admin 680 2 Nov 20:22 /usr/local
drwxr-xr-x 20 mathew admin 680 9 Nov 21:58 /usr/local/python_virtualenv
drwxr-xr-x 6 mathew admin 204 2 Nov 21:36 /usr/local/python_virtualenv/baseline
drwxr-xr-x 4 mathew admin 136 2 Nov 21:26 /usr/local/python_virtualenv/baseline/lib
drwxr-xr-x 52 mathew admin 1768 2 Nov 21:26 /usr/local/python_virtualenv/baseline/lib/python2.7
drwxr-xr-x 18 mathew admin 612 4 Nov 21:20 /usr/local/python_virtualenv/baseline/lib/python2.7/site-packages
-rwxr-xr-x 1 mathew admin 66076 2 Nov 21:18 /usr/local/python_virtualenv/baseline/lib/python2.7/site-packages/_mysql.so
Что мне нужно сделать, чтобы mod_wsgi нашел libmysqlclient.16.dylib?
apache и mysql являются 64-битными:
выдра: lib mathew $ file / usr / sbin / httpd / usr / sbin / httpd: Mach-O
универсальный двоичный файл с 2 архитектурами / usr / sbin / httpd (для
архитектура x86_64): 64-разрядный исполняемый файл Mach-O x86_64 / usr / sbin / httpd
(для архитектуры i386): исполняемый файл Mach-O i386 выдра: lib mathew $
выдра: lib mathew $ file /usr/local/mysql/lib/libmysqlclient.16.dylib
/usr/local/mysql/lib/libmysqlclient.16.dylib: 64-разрядная версия Mach-O
динамически связанная общая библиотека x86_64
обновление: это не настоящее решение, но я обошел ошибку, используя:
sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/python_virtualenv/baseline/lib/python2.7/site-packages/_mysql.so
Вы можете найти объяснение по адресу: http://qin.laya.com/tech_coding_help/dylib_linking.html и на странице списка рассылки mod_wsgi групп google: http://groups.google.com/group/modwsgi/browse_thread/thread/6517dc90be9d43ff