Django: не удается загрузить статические файлы из шаблона в DigitalOcean Droplet

У меня возникают проблемы с загрузкой статических файлов из шаблона в моем приложении Django, работающем на компьютере DigitalOcean.

Вот мой файл конфигурации Nginx (etc/nginx/sites-available/django):

# your Django project's static files - amend as required
location /static {
    alias /home/workspace/app-toscana/django/djangoapptoscana/djangoapptoscana/static;
}

Вот мой файл settings.py:

STATIC_PATH = os.path.join(BASE_DIR,'static')

STATIC_URL = '/static/' # You may find this is already defined as such.

STATICFILES_DIRS = (
    STATIC_PATH, )

Вот пример вызова файла шаблона:

{% load staticfiles %}
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>AdminLTE 2 | Dashboard</title>
    <meta content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' name='viewport'>
    <!-- Bootstrap 3.3.4 -->
    <link href="{% static 'bootstrap/css/bootstrap.min.css' %}" rel="stylesheet" type="text/css" />

Я пробовал разные решения, особенно изменение файла settings.py, но безрезультатно. Возможно, в конфигурациях Nginx и gunicorn есть какая-то проблема, которую я не могу найти.


person neoben    schedule 19.05.2015    source источник
comment
Попробуйте выяснить, в какой части вашей конфигурации возникла ошибка. Созданы ли ссылки в файлах шаблонов так, как вы ожидаете? Поместите файл в /home/workspace/app-toscana/django/djangoapptoscana/djangoapptoscana/static (если его еще нет, и попробуйте получить к нему доступ в /static/myfile.txt. Проверьте, что говорят журналы Nginx. Перечитайте документы по развертыванию статических файлов. В частности, вы, похоже, не установили STATIC_ROOT или не запустили collectstatic. Удачи в выяснении проблемы: )   -  person Alasdair    schedule 20.05.2015
comment
STATIC_ROOT установлен. Запустив вручную сервер с помощью команды python manage.py runserver localhost:9000, я не вижу особых проблем в оболочке сервера, но если я попытаюсь получить доступ к странице, используя общедоступный IP-адрес сервера, я не могу загрузить статический файл, получая ошибку 404 (на статический файл). Например. GET http://188.166.72.87/static/bootstrap/css/bootstrap.min.css => STATUS 404   -  person neoben    schedule 20.05.2015
comment
Я тоже выполнил команду collecstatic безрезультатно.   -  person neoben    schedule 20.05.2015
comment
runserver и nginx — это тоже очень разные вещи. Как определяется STATIC_ROOT, в вашем вопросе такого кода нет. Кроме того, попробуйте удалить STATICFILES_DIRS из ваших настроек live, чтобы посмотреть, как это происходит, тогда я объясню.   -  person Wtower    schedule 20.05.2015
comment
Вот моя конфигурация статических файлов (из settings.py) STATICFILES_FINDERS = ( 'django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder' ) STATIC_ROOT = '/home/workspace/app-toscana/django/djangoapptoscana/static/' STATIC_URL = '/static/' Нет переменных STATIC_PATH и STATIC_DIR.   -  person neoben    schedule 20.05.2015
comment
Я опубликовал полный отчет о проблеме журнала в форме запроса DigitalOcean. Его можно найти по следующему адресу: ссылка   -  person neoben    schedule 20.05.2015


Ответы (1)


Надеюсь, я нашел решение этой проблемы. Это был вопрос разрешения. На моей машине DigitalOcean я установил владельца каталога приложений django в root:root

chown -R root:root /home/django/djangoapptoscana/dashboard

и владелец каталога статических файлов на django:django

chown -R django:django /home/django/djangoapptoscana/djangoapptoscana/static

person neoben    schedule 20.05.2015