У меня установлен экземпляр Django на сервере Apache, работающем через uWSGI hunky dory.На моей локальной машине все выглядит отлично, когда я использую python manage.py runserver
.К сожалению, в ту минуту, когда я загрузил файлы на свой предварительно подготовленный рабочий сервер, он отказался загружать все встроенные статические файлы Django, возвращая 404, и я понятия не имею, почему ...
URL, которыйзапрашиваемый список указан как www.mysite.com/static/admin/css/fonts.css
и аналогичен для административного бэкэнда (css/base.css
, css/dashboard.css
и css/responsive.css
).Сначала я подумал, что с пакетами что-то не так, поэтому принудительно переустановил Django, но не пошел.Все еще не загружается ...
Вот мой конфиг uWSGI .ini:
[uwsgi]
chdir = /path/to/top/level/mysite
module = mysite.wsgi:application
env = DJANGO_SETTINGS_MODULE=mysite.settings
master = true
pidfile = /path/to/project.pid
socket = 127.0.0.1:49152
; Dont use UNIX sockets as it confuses the proxy and alters the request
: URL's. Current Apache version cant handle it.
; socket=/var/run/swerth_django.sock
processes = 5
harakiri = 20
post-buffering = 1
max-requests = 5000
vacuum = true
home = /path/to/top/level/Virtualenv/directory
daemonize = /path/to/uWSGI.log
env = LANG=en_US.UTF-8
enable-threads = true
И я включил статический корень и URL следующим образом (комментарии были для моего собственного понимания):
#The URL of which the static files in STATIC_ROOT directory are served
STATIC_URL = '/static/'
#The absolute path to the directory where ./manage.py collectstatic
# will collect static files for deployment.
STATIC_ROOT = '/home/swerth/public_html/swerth/static'
Стоит отметить, однако, что у меня пока нет собственных статических файлов.Я не на этом этапе развития.Я просто хочу использовать шаблоны, поставляемые с Django.
Редактировать:
Хорошо, поэтому я провел небольшое исследование и смог немного его сузить (Спасибо @ Alasdair для указания на определенную страницу в Django документах).Кажется, я могу просто запустить python manage.py collectstatic
и он импортирует все нужные мне файлы в www.mysite.com/static
.Однако по какой-то причине django dosnt, похоже, «видит» файлы, поскольку они не отображаются в браузере (404 не найдено).
В свете этого я предполагаю, что моя конфигурация в settings.py
?
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.1/howto/static-files/
#The URL of which the static files in STATIC_ROOT directory are
#served
STATIC_URL = '/static/'
#The absolute path to the directory where ./manage.py collectstatic
# will collect static files for deployment.
STATIC_ROOT = os.path.join(BASE_DIR, "static")
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
Мой Apache настроен в качестве обратного прокси-сервера с использованием следующей конфигурации:
RewriteEngine off
ProxyPreserveHost on
ProxyPass "/" "uwsgi://127.0.0.1:49152/"
ProxyPassReverse "/" "uwsgi://127.0.0.1:49152/"
Я делаю это неправильно или что-то в этом роде?(PS Я пытаюсь избежать необходимости редактировать ссылку на статический файл HTML-файлов, поскольку я действительно хотел бы знать, ЧТО я делаю неправильно, чтобы это не повторилось, поскольку Django должен быть в состоянии обслуживать прямо с www.mysite.com/static
)
Правка раунда 2:
Хорошо, поэтому я сделал так, как предлагал, и попытался настроить мой прокси-сервер на исключение статического каталога и просто обслуживать файлы в обычном режиме, а также добавил псевдоним для сопоставления URL-адреса сфактический каталог, но он все еще не работает должным образом.Кажется, он полностью игнорирует мое ProxyPass
исключение и отправляет его в Django, хотя я включил его выше менее специфического правила?Интересная проблема, когда я указываю /admin/
вместо просто /
для менее специфичного ProxyPass
, он только передает этот URL-адрес Django, однако Django внезапно поднимает 404 для /admin/
.Кроме того, я получаю 403
, запрещенный для статических файлов, которые я пытался обслуживать?!?!Мой текущий .conf выглядит так:
Alias /static/ /home/swerth/public_html/swerth/static/
<Directory /home/swerth/public_html/swerth/static/>
Require all granted
</Directory>
<Directory /home/swerth/public_html/swerth/swerth/>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
ProxyPreserveHost on
ProxyPass /whm-server-status/ !
ProxyPass /static/ !
ProxyPass / uwsgi://127.0.0.1:49152/
ProxyPassReverse / uwsgi://127.0.0.1:49152/