2016-12-05 1 views
1

Я пытаюсь использовать gunicorn для обслуживания статических файлов, прежде чем настраивать nginx как обратный прокси, и я немного запутался.Как Gunicorn собирает статическую?

Когда я запускаю свои приложения, похоже, что gunicorn не может найти статическую папку в приложении.

У меня есть следующий скрипт для запуска приложения Django.

#!/bin/bash 

# Start with development server 
# echo Start server. 
# python manage.py runserver 0.0.0.0:8000 

# python manage.py collectstatic --noinput # Collect static files 

# # Prepare log files and start outputting logs to stdout 
touch /srv/logs/gunicorn.log 
touch /srv/logs/access.log 
tail -n 0 -f /srv/logs/*.log & 

# # Start Gunicorn processes 
echo Starting Gunicorn. 
exec gunicorn django_project.wsgi:application \ 
    --name ds4dems \ 
    --bind 0.0.0.0:8000 \ 
    --workers 3 \ 
    --log-level=info \ 
    --log-file=/srv/logs/gunicorn.log \ 
    --access-logfile=/srv/logs/access.log \ 
    "[email protected]" 

В результате стиль и изображения не собираются из статической папки main_app.

Структура папок следующая.

django_project 
---- django_project 
---- main_app 
-------- static 

После того, как я попытался запустить такое же приложение с сервером разработки, и собрана статика. Затем я возобновил работу с Gunicorn, и стили и изображения были отправлены в браузер без ошибок.

Что именно происходит?

Связано ли это с this? Единственная доступная опция для установки nginx, чтобы он мог видеть файлы?

+1

У меня есть чертеж, который может вам пригодиться: http://djangodeployment.com/2016/11/21/how-django-static-files-work-in-production/. Предполагается, что вы используете 'nginx' или' apache', но это может быть полезно, даже если вы используете whitenoise, так как принципы одинаковы. –

+0

Это здорово. Я сделаю плакат этого. :) – sparaflAsh

ответ

2

Можно использовать статические файлы с помощью пушки, используя дополнительную библиотеку промежуточного программного обеспечения: Whitenoise. Как показывает эта документация, почти все, что вам нужно сделать, это включить ее в настройку MIDDLEWARE_CLASSES.

Обратите внимание, что все же предпочтительнее обслуживать файлы непосредственно через nginx, а не спускать этот маршрут.

Также обратите внимание, что вы, похоже, путаетесь в различии между сбором статических файлов и обслуживанием их. «Сбор» относится к процессу перехода во все ваши отдельные статические каталоги и копированию/связыванию файлов для обслуживания. Это задание команды manage.py collectstatic: это не имеет никакого отношения к gunicorn или nginx, вам всегда нужно будет запустить эту команду. Как только вы это сделаете, вы сможете обслуживать их либо напрямую, либо через whitenoise.

+0

Я определенно смущен. Мне пришлось прокомментировать «python manage.py collectstatic --noinput», поскольку он, похоже, не смог найти статику. Почему сервер разработки успешно работает, а приложение - нет? – sparaflAsh

+1

К сожалению. Полагаю, мне просто нужно установить STATIC_ROOT и STATIC_URL. в settings.py для использования коллективного приложения. – sparaflAsh

0

Gunicorn сам обслуживает только динамические файлы.

Кроме Ngnix вы также можете использовать AWS S3 и RawGit для обслуживания статических активов.