Использование Whitenoise, но по-прежнему не может обслуживать статические файлы

Я пытаюсь обслуживать статические файлы на моем веб-сайте обзора продуктов, и я использую Whitenoise, но это не сработало (не могу найти файлы в /static) (когда я тестирую локально с DEFAULT = False, это все еще работает)

Я пытался настроить файл wsgi вместо использования промежуточного программного обеспечения whitenoise.

Это мой некоторый код в моем файле настроек для статического обслуживания.

DEBUG = False

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
    ...
]

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

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    'djangobower.finders.BowerFinder',
)

Можете ли вы показать мне, как это исправить? Простите за мой английский

Я попытался настроить параметры снова:

DEBUG = False

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
    ...
]

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
# I don't have STATICFILES_DIRS, is it wrong?
STATICFILES_STORAGE = "whitenoise.storage.CompressedStaticFilesStorage"
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    'djangobower.finders.BowerFinder',
)

Но он по-прежнему не может обслуживать статические файлы.


person Nguyễn Minh Chí    schedule 02.10.2019    source источник
comment
если результаты тестирования на локальном компьютере отличаются, можете ли вы поделиться конфигурацией nginx/Apache, чтобы увидеть, есть ли какие-либо проблемы, которые могут помешать?   -  person fixmycode    schedule 02.10.2019


Ответы (2)


Я считаю, что вам не хватает STATICFILES_STORAGE. Это моя конфигурация, связанная с settings.py.

STATICFILES_STORAGE = "whitenoise.storage.CompressedManifestStaticFilesStorage"
STATIC_URL = "/static/"
STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles")
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]
ALLOWED_HOSTS = ["*"]
person Higor Rossato    schedule 02.10.2019
comment
Можете ли вы показать мне строку, которую вы конфигурируете ALLOW_HOST, я пытаюсь поставить staticfiles_storage, но он возвращает код 500, 400. И когда я запускаю collectstatic (я удалил все файлы static и staticfiles), он возвращается с ошибкой не может найти статический каталог (код такой же, как у вас). Спасибо - person Nguyễn Minh Chí; 02.10.2019
comment
Я разрешаю все на моем ALLOWED_HOSTS, потому что это тестовый проект. Я отредактировал свой ответ. - person Higor Rossato; 02.10.2019
comment
Я пробовал это, но когда я запускаю его на веб-сайте обзора, он возвращает ошибку 500, и когда я удаляю staticfiles_storage, он может снова открыть веб-сайт (но не может загружать статические файлы). Можете ли вы сказать мне, как решить эту проблему? - person Nguyễn Minh Chí; 02.10.2019
comment
Я решил ошибку 500, используя STATICFILES_STORAGE = "whitenoise.storage.CompressedStaticFilesStorage", и это работает, но по-прежнему не может загружать статические файлы. - person Nguyễn Minh Chí; 02.10.2019
comment
Прохладный. Это был первый раз, когда я использовал это, поэтому точно не знаю входы и выходы этого пакета. - person Higor Rossato; 02.10.2019
comment
Поэтому, пожалуйста, посмотрите мои обновленные файлы конфигурации, и вы можете дать мне какой-нибудь совет, я потратил на это все утро :‹ - person Nguyễn Minh Chí; 02.10.2019
comment
Вы должны попытаться добавить STATICFILES_DIRS, как я добавил в своем ответе. - person Higor Rossato; 02.10.2019

Я следовал приведенным ниже параметрам конфигурации, чтобы решить проблему.

DEBUG = False

ALLOWED_HOSTS = ['testnewapp.herokuapp.com']

INSTALLED_APPS = [
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'whitenoise.runserver_nostatic',
    'django.contrib.staticfiles',
    'widget_tweaks',
    'phonenumber_field',
    'django_extensions',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
    ...
]

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'
STATICFILES_DIRS = [
     os.path.join(BASE_DIR, "static"),
]

# Whitenoise Storage Class  - Apply compression but don’t want the caching behaviour
STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'

# Comment the below line
# django_heroku.settings(locals())


То, что нужно запомнить

  1. Убедитесь, что вы используете статический тег шаблона для ссылки на свои статические файлы, а не пишете URL-адрес напрямую. Например:
{% load static %}
<img src="{% static "images/error.jpg" %}" alt="OOps!" />

<!-- DON'T WRITE THIS -->
<img src="/static/images/error.jpg" alt="OOps!" />
  1. Если вы получаете сообщение об ошибке с collectstatic, просто отключите его, указав Heroku игнорировать выполнение команды manage.py collecstatic во время процесса развертывания.

Но если вам нужно использовать WhiteNoise с любым приложением WSGI

  • Вам нужно обернуть существующее приложение WSGI в экземпляр WhiteNoise и указать ему, где найти ваши статические файлы. Например:
from my_project import MyWSGIApp

application = MyWSGIApp()
application = WhiteNoise(application, root='/path/to/static/files')
application.add_files('/path/to/more/static/files', prefix='more-files/')

Примечание

Эти инструкции применимы к любому приложению WSGI. Однако для приложений Django лучше использовать класс WhiteNoiseMiddleware, который упрощает интеграцию.

#

http://whitenoise.evans.io/en/stable/base.html

person Adhavan    schedule 01.02.2020