Отсутствует запись в манифесте staticfiles при развертывании Django с использованием Heroku

Я пытаюсь развернуть свое веб-приложение на героку. Я использую Django, и это большая часть моего файла settings.py:

"""
Django settings for blog project on Heroku. For more info, see:
https://github.com/heroku/heroku-django-template

For more information on this file, see
https://docs.djangoproject.com/en/1.9/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.9/ref/settings/
"""

import os
import dj_database_url
import raven

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))

try:
    from .local_settings import *
except ImportError:
    pass

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    # Disable Django's own staticfiles handling in favour of WhiteNoise, for
    # greater consistency between gunicorn and `./manage.py runserver`. See:
    # http://whitenoise.evans.io/en/stable/django.html#using-whitenoise-in-development
    'whitenoise.runserver_nostatic',
    'django.contrib.staticfiles',
    'blogapp',
    'homeapp',
    'nimfksapp',
    'omniclipapp',

    #Heroku Sentry
    'raven.contrib.django.raven_compat',
]

MIDDLEWARE_CLASSES = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'blog.urls'
   
WSGI_APPLICATION = 'blog.wsgi.application'
    
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.9/howto/static-files/

STATIC_ROOT = os.path.join(BASE_DIR, 'live-static', 'static-root')
STATIC_URL = '/static/'

# Extra places for collectstatic to find static files.
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]

MEDIA_URL = "/media/"

MEDIA_ROOT = os.path.join(BASE_DIR, "live-static", "media-root")

# Simplified static file serving.
# https://warehouse.python.org/project/whitenoise/
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

При локальном запуске collectstatic статические файлы собираются нормально и отображаются на веб-странице. Когда я развертываю приложение на heroku (который автоматически запускает для меня команду collectstatic), возникает внутренняя ошибка сервера (500). Я последовал рекомендации на аналогичной странице SO и добавил часового в приложение через heroku и получил более четкое сообщение об ошибке:

ValueError / nimfks / error Отсутствует запись в манифесте статических файлов для ...

Я безуспешно пытался изменить (и удалить) STATICFILES_STORAGE. Удалив его, я справился с ошибкой, но попытка отобразить фактический статический файл (в данном случае изображение) не сработала, т.е. он не загружался.

Я также попытался изменить статические настройки, чтобы использовать PROJECT_ROOT вместо BASE_DIR, и множество различных конфигураций, но все они не работали.

Я что-то упустил? Кажется, я не могу найти ответа на аналогичные вопросы, заданные на SO.

ИЗМЕНИТЬ

Ответ:

Как бы это ни было неловко, я хочу продолжать в том же духе, поскольку это может помочь кому-то еще, борющимся с этим. В моем случае проблема заключалась в том, что я использовал .PNG в своем html-файле вместо .png, которое было настоящим расширением файла. Не понимал, что это чувствительно к регистру. Реальным решением этой проблемы было, по сути, просто наличие часового, которое будет улавливать эти типы ошибок (см. сторожевые документы). Это моя последняя версия моих статических настроек в файле settings.py:

import os
import dj_database_url
import raven

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))

    MIDDLEWARE_CLASSES = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

WSGI_APPLICATION = 'blog.wsgi.application'

STATIC_ROOT = os.path.join(PROJECT_ROOT, 'staticfiles')
STATIC_URL = '/static/'

# Extra places for collectstatic to find static files.
STATICFILES_DIRS = [
    os.path.join(PROJECT_ROOT, 'static'),
]

# Simplified static file serving.
# https://warehouse.python.org/project/whitenoise/
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

person 137    schedule 23.07.2017    source источник


Ответы (1)


Попробуйте прокомментировать строку 'django.contrib.staticfiles', внутри INSTALLED_APPS.

person Sab    schedule 09.08.2017