Настройка 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)

Решение

Для вашей первой проблемы вы уверены, что у вас есть 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.