Назад | Перейти на главную страницу

Django под ключ бросает 404 с измененным файлом конфигурации apache

Я настраиваю Джанго под ключ решение, и оно отлично работает, если вы используете готовый проект Django, который они предоставляют. Но работать с ним сложно, и это нарушает многие правила и рекомендации, содержащиеся в документации Django, и включает в себя так много раздутий, что это ломается в момент обновления или установки нового пакета. Поэтому я пытаюсь настроить его так, чтобы я мог создать свой собственный проект Django с нуля с моими собственными путями к файлам.

Все мои базы данных, зависимости, пакеты и файлы Django находятся в рабочем состоянии в virtualenv, но когда я перехожу к редактированию файла конфигурации Apache с моими пользовательскими каталогами, он выдает ошибку 404.

Вот что я использую и версии:

Примечание: В Turnkey Django файлы конфигурации Apache немного отличаются от стандартных файлов Apache. 000-default.conf ничего не делает в Django под ключ.

Итак, когда я меняю django.conf в /root/etc/apache2/sites-available по умолчанию:

   serverName localhost

   WSGIScriptAlias / /var/www/turnkey_project/turnkey_project/wsgi.py
   WSGIPythonPath /var/www/turnkey_project
   WSGIDaemonProcess django processes=1 threads=3
   WSGIProcessGroup django

   <VirtualHost *:80>
       UseCanonicalName Off
       ServerAdmin  webmaster@localhost
       DocumentRoot /var/www/turnkey_project/static
   </VirtualHost>

   <VirtualHost *:443>
       SSLEngine on
       ServerAdmin  webmaster@localhost
       DocumentRoot /var/www/turnkey_project/static
   </VirtualHost>

   Alias /static /var/www/turnkey_project/static
   <Location "/static">
       SetHandler None
   </Location>

   Alias /doc /usr/share/doc/python-django-doc/html
   <Location "/doc">
       SetHandler None
   </Location>

То, что я предполагал, будет работать с моими собственными путями к файлам, но не:

   ServerName localhost

   WSGIScriptAlias / /var/www/sys/main/wsgi.py
   WSGIPythonPath /var/www/sys
   WSGIDaemonProcess django processes=1 threads=3
   WSGIProcessGroup django

   <VirtualHost *:80>
       UseCanonicalName Off
       ServerAdmin  webmaster@localhost
       DocumentRoot /var/www/sys/static
   </VirtualHost>

   <VirtualHost *:443>
       SSLEngine on
       ServerAdmin  webmaster@localhost
       DocumentRoot /var/www/sys/static
   </VirtualHost>

   Alias /static /var/www/sys/static
   <Location "/static">
       SetHandler None
   </Location>

   Alias /doc /var/www/sys/doc/html
   <Location "/doc">
       SetHandler None
   </Location>

Так почему же он выдает ошибку 404, когда я перехожу на свой IP-адрес? Я неправильно его настраиваю или «под ключ» слишком ограничивает? Вроде все в рабочем состоянии, но работать просто не хочет.

У меня есть приложение в моем проекте Django, и для тех, кто знаком с Django, и его шаблоны URL-адресов будут знать, что оно автоматически изменит URL-адрес с foo.com/bar к foo.com/bar/ (обратите внимание на суффикс '/'). Когда я «перехожу» к своему приложению, оно автоматически применяет это изменение, возможно, это говорит о том, что Django работает правильно, но, возможно, мои каталоги в моей конфигурации apache неверны или макет файла неправильный (возможно).

Извините за такой медленный ответ. Я подписан на тег "под ключ-linux", но почему-то не получил уведомление об этом ?! Я предполагаю, что вы, вероятно, уже ушли, но вот мой 2c:

Прежде всего стоит знать о нескольких вещах. Под капотом TurnKey находится Debian. Он немного изменен, и мы предоставляем несколько собственных пакетов, но в основном это Debian. В нашем устройстве Django мы устанавливаем Django из репозиториев Debian.

«Примерное» приложение TurnKey не должно быть чем-то большим, чем песочница, с которой можно поиграть (а также в качестве быстрого теста на дым, чтобы убедиться, что все на месте).

TBH, с предоставленной вами информацией действительно сложно даже догадаться, в чем может быть проблема. Вы должны хотя бы проконсультироваться со своим журналом apache (/var/log/apache2/error.log), и это, скорее всего, прояснит, что он не может найти (и, возможно, даже почему).

Я предполагаю, что вы ошиблись одним из своих путей. Или, может быть, это проблема с разрешениями? (То есть пользователь веб-сервера не имеет доступа к тому, к чему ему нужен доступ). Но я только догадываюсь ...