Настройка Django с mod_python, Apache на SuSE с псевдонимом - PullRequest
3 голосов
/ 24 февраля 2009

У меня серьезные проблемы с работой Django с моей конфигурацией Apache. Я не создавал сервер, поэтому у меня не так много возможностей для работы сервера. По сути, есть три виртуальных хоста:

board.site.org, Students.site.org и insider.site.org

Insider.site.org - это главное, что меня интересует. Я отвечаю за небольшой сайт под ним (в идеале на insider.site.org/tech). Я решил поместить мои файлы отдельно от оригинального каталога, чтобы случайно не испортить что-то там (так как сайт, не являющийся питоном, уже существует). В любом случае, мои виртуальные хосты определены в отдельных файлах в /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 "

Traceback (последний последний вызов):

Файл "/Usr/lib64/python2.4/site-packages/mod_python/apache.py", строка 299, в HandlerDispatch результат = объект (требование)

Файл "/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: нет модуля с индексным индексом

Принимая во внимание, что http://insider.site.org/tech (без косой черты) приводит к ошибке 403. У меня есть Django в этом каталоге, но он просто не выполняется (у меня есть _ init _.py во всех моих каталогах в папке tech, и это копия с моего персонального компьютера ( который сбежал с тестового сервера django)), так что я не думаю, что это проблема. Это просто не работает: - (

Любая помощь приветствуется, спасибо.

Ответы [ 3 ]

2 голосов
/ 24 февраля 2009

Для вашей первой проблемы, вы уверены, что у вас есть Django в PythonPath, который вы указали? На моем сервере список в моем PythonPath включает каталог, содержащий каталог верхнего уровня django, который сам содержит каталоги bin, contrib, admin, core и т. Д. В дополнение к __init__.py. (Также убедитесь, что ваш пользователь 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]

Надеюсь, это поможет.

1 голос
/ 05 марта 2009

Alias /tech /srv/www/Tech следует удалить, а <Directory /srv/www/Tech> следует преобразовать в местоположение.

Помните, вы не пытаетесь заставить Apache обслуживать ваши Python-файлы, вы говорите ему запустить определенный процесс Python, когда он попадает в определенное место.

Кроме того, могу ли я предложить вам использовать субдомены вместо того, чтобы ваше Django-приложение находилось в «папке» на вашем основном домене. На мой взгляд, это упрощает ситуацию.

Также на ваше рассмотрение mod_wsgi. Недавно я начал использовать его для своих приложений Django, и они сделали качественный скачок в производительности и стабильности:)

0 голосов
/ 05 марта 2009

Возможно, это не так полезно для проблемы mod_python, но на самом деле mod_python является худшим способом развертывания Django (на самом деле худшим способом развертывания любого Python вообще).

Пожалуйста, рассмотрите хотя бы использование mod_wsgi, это лучше по производительности и по ряду других причин. Кроме того, вы получите отличную поддержку от разработчиков этого мода в #django на freenode.

Spawning / FastCGI еще лучше, если вообще не беспокоиться об Apache.

...