Настройка Django с помощью mod_python, Apache на SuSE с псевдонимом
У меня серьезные проблемы с тем, чтобы Django работал с моей конфигурацией Apache. Я не создавал сервер, поэтому у меня нет большой свободы действий в отношении того, как сервер работает. По сути, есть три виртуальных хоста:
board.site.org, student.site.org и insider.site.org
Insider.site.org - это главный вопрос, который меня беспокоит. Я отвечаю за небольшой сайт под ним (в идеале на insider.site.org/tech). Я решил разместить свои файлы отдельно от исходного каталога, чтобы не испортить что-то там (поскольку сайт не на Python уже существует). В любом случае мои виртуальные хосты определены в отдельных файлах в /etc/apache2/vhosts.d/
Вот как выглядит конфиг insider.site.org
insider.conf
LoadModule python_module /usr/lib64/apache2/mod_python.so
<VirtualHost 10.10.1.1:80>
ServerName insider.site.org
DocumentRoot /media/nss/VWEB/docs
<Directory /media/nss/VWEB/docs>
Options Indexes Multiviews
AllowOverride None
Order Allow,Deny
#Allow from 10.11.0.78
Allow from all
</Directory>
Alias /tech /srv/www/Tech
<Directory /srv/www/Tech>
SetHandler python-program
PythonPath "['/srv/www/Tech'] + sys.path"
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE Tech.settings
PythonDebug On
</Directory>
Alias /media /srv/www/Media
<Directory /srv/www/Media>
SetHandler None
</Directory>
</VirtualHost>
- Обратите внимание: когда я говорю site.org, я имею в виду свой сайт, а не фактический веб-адрес site.org.
Теперь мне кажется, что это должно быть правильным для меня, но по какой-то причине доступ к http://insider.site.org/tech/ дает мне эту ошибку:
Ошибка Mod_python: "PythonHandler mod_python.publisher"
Отслеживание (последний вызов последний):
Файл "/usr/lib64/python2.4/site-packages/mod_python/apache.py", строка 299, в HandlerDispatch result = object (req)
Файл "/usr/lib64/python2.4/site-packages/mod_python/publisher.py", строка 98, в пути к обработчику = [путь])
Файл "/usr/lib64/python2.4/site-packages/mod_python/apache.py", строка 454, в import_module f, p, d = imp.find_module (parts [i], path)
ImportError: нет модуля с именем index
В то время как http://insider.site.org/tech (без косой черты в конце) выдает ошибку 403. У меня есть Django в этом каталоге, но он просто не запускается (у меня есть _ init _.py во всех моих каталогах в технической папке, и это копия с моего личного компьютера (который работал с django тестовый сервер)) так что я не думаю, что это проблема. Это просто не работает :-(
Любая помощь приветствуется, спасибо.
Ответов (3)3
Для вашей первой проблемы вы уверены, что у вас есть Django в указанном вами PythonPath? На моем сервере список в моем PythonPath включает каталог, содержащий каталог django верхнего уровня, который, в дополнение к __init__.py, содержит каталоги bin, contrib, admin, core и т. Д. (Также убедитесь, что ваш пользователь Apache имеет разрешения на чтение и выполнение для этих файлов и каталогов, хотя я уверен, что это очевидно.) Это моя установка:
<Location "/myapp">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE LogFileAnalyzer.settings
PythonDebug on
PythonPath "['/srv/www/dir_containing_django_dir', '/srv/www/myapp_dir'] + sys.path"
</Location>
Обратите внимание, что здесь я использую Location вместо Directory, поэтому ваш опыт может отличаться.
Для вашей второй проблемы это похоже на проблему для mod_rewrite. Смотрите здесь . Вы можете позволить серверу добавлять нужную косую черту автоматически, задав правило перезаписи:
RewriteEngine on
RewriteBase /~quux/
RewriteRule ^foo$ foo/ [R]
Надеюсь, это поможет.
Alias /tech /srv/www/Tech
следует удалить и <Directory /srv/www/Tech>
преобразовать в местоположение.
Помните, что вы не пытаетесь заставить Apache обслуживать ваши файлы Python, вы говорите ему запустить определенный процесс Python, когда он попадает в определенное место.
Кроме того, могу ли я предложить вам использовать поддомены вместо того, чтобы ваше приложение Django находилось в «папке» в вашем основном домене. На мой взгляд, это имеет тенденцию к упрощению.
Также на ваше рассмотрение mod_wsgi
. Недавно я начал использовать его для своих приложений Django, и они сделали качественный скачок в производительности и стабильности :)
Возможно, это не так полезно для проблемы mod_python, но на самом деле mod_python - худший способ развертывания Django (на самом деле худший способ развертывания любого типа Python вообще).
Пожалуйста, подумайте об использовании хотя бы mod_wsgi, это лучше для производительности и по ряду других причин. Кроме того, вы получите отличную поддержку от разработчиков этого мода на #django на freenode.
Spawning / FastCGI еще лучше в том смысле, что вы даже не беспокоитесь об Apache.