Почему Nginx не может найти Django файлы stati c? - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь понять, как stati c файлы обслуживаются Django, используя проект, который я создал на моей Ma c, используя Django 3, Gunicorn и Nginx. Веб-сайт обслуживает шаблоны правильно, за исключением того, что шаблоны не могут видеть мою таблицу стилей CSS. Когда я go на странице, например 127.0.0.1:8000/app1/ и просматриваю источник, я вижу это в моем шаблоне HTML:

<link rel="stylesheet" href="/static/css/main.css">

Если я нажимаю на ссылку href, я получаю страницу «Не найдено» по адресу http://127.0.0.1:8000/static/css/main.css. Кажется, это должна быть правильная ссылка, но шаблон не может видеть основную таблицу стилей. css, как я и ожидал.

Вот соответствующие файлы в моем проекте mysite, расположенном в / Users / me / projects / django / django -staticfiles:

├── app1
│   ├── templates
│   │   └── app1
│   │       └── index.html
├── mysite
│   ├── settings.py
│   └── wsgi.py
├── static
│   └── css
│       └── main.css
├── static-final
│   ├── admin
│   │   ├── css
│   │   ├── fonts
│   │   ├── img
│   │   └── js
│   └── css
│       └── main.css

Вот соответствующие настройки:

# mysite/settings.py
...
DEBUG = False
ALLOWED_HOSTS = ['127.0.0.1', ]
...
INSTALLED_APPS = [
    'django.contrib.staticfiles',
    'app1',
]
...
STATIC_URL = '/static/'
STATICFILES_DIRS = (
        os.path.join(BASE_DIR, 'static'),
)
STATIC_ROOT = os.path.join(BASE_DIR, 'static-final/')
...

Я установил Gunicorn в свою виртуальную среду и запустил его с помощью этой команды:

gunicorn --bind 0.0.0.0:8000 mysite.wsgi

Я установил Nginx, используя Homebrew. Вот часть nginx .conf, которая включает мои Nginx настройки:

# /usr/local/etc/nginx.conf
...
http {
    ...
    server {
        listen      8080;
        server_name localhost;
    }
    ...
    include server/*;
}

Вот моя Nginx конфигурация:

# /usr/local/etc/nginx/servers/django-staticfiles
server {
    listen 80;
    server_name 127.0.0.1;

    location / {
        proxy_pass http://127.0.0.1:8000;
    }

    location /static/ {
        alias /Users/me/projects/django/django-staticfiles/static-final;
    }
}

Я должен добавить это, когда я остановите Gunicorn и запустите сервер разработки Django с DEBUG = True, шаблон app1 правильно обращается к основному файлу. css. Это просто не видно, когда я работаю с Gunicorn и Nginx. Я понимаю, что у меня нет реальной необходимости запускать Gunicorn / Nginx на моей Ma c, но я просто настроил его, чтобы я мог сравнить и сравнить, как Django управляет файлами stati c в развитие против производства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...