Подтвердить что ты не робот

Команда "collectstatic" не работает, когда WhiteNoise включен

Я пытаюсь использовать статические файлы через WhiteNoise в соответствии с рекомендацией Heroku. Когда я запускаю collectstatic в моей среде разработки, это происходит:

Post-processing 'css/iconic/open-iconic-bootstrap.css' failed!

Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
    utility.execute()
  File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/django/core/management/__init__.py", line 377, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/django/core/management/base.py", line 288, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/django/core/management/base.py", line 338, in execute
    output = self.handle(*args, **options)
  File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/django/core/management/base.py", line 533, in handle
    return self.handle_noargs(**options)
  File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 168, in handle_noargs
    collected = self.collect()
  File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 120, in collect
    raise processed
  File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/django/contrib/staticfiles/storage.py", line 242, in post_process
    content = pattern.sub(converter, content)
  File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/django/contrib/staticfiles/storage.py", line 181, in converter
    hashed_url = self.url(unquote(joined_result), force=True)
  File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/django/contrib/staticfiles/storage.py", line 128, in url
    hashed_name = self.stored_name(clean_name)
  File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/django/contrib/staticfiles/storage.py", line 277, in stored_name
    cache_name = self.clean_name(self.hashed_name(name))
  File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/django/contrib/staticfiles/storage.py", line 91, in hashed_name
    (clean_name, self))
ValueError: The file 'css/fonts/open-iconic.eot' could not be found with <whitenoise.django.GzipManifestStaticFilesStorage object at 0x7f57fc5b1550>.

Команда статической коллекции запускается без инцидентов, когда я комментирую эту строку в моих настройках:

STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'

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

4b9b3361

Ответ 1

Проблема заключается в том, что css/iconic/open-iconic-bootstrap.css ссылается на файл open-iconic.eot, который не существует в ожидаемом местоположении.

Когда вы запустите collectstatic с помощью этого хранилища, Django попытается переписать все URL-адреса в ваших файлах CSS, чтобы они ссылались на файлы по их новым именам, например, css/iconic/open-iconic.8a7442ca6bed.eot. Если он не может найти файл, он останавливается с этой ошибкой.

Ответ 2

У меня была эта же проблема и исправлена ​​ее, удалив эту строку из моего файла настроек,

STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'

Я получил эту строку на странице документации Heroku...

Ответ 3

У меня была эта ошибка с отсутствием файла .css, когда все мои файлы .css существовали, потому что я доверял документации Heroku:

STATIC_ROOT = 'staticfiles'

над документацией WhiteNoise:

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

Исправление тривиально, но до тех пор, пока Heroku не зафиксирует свои документы (я отправил отзыв), дайте убедиться, что решение, по крайней мере, появляется в SO.

Ответ 4

Проблема заключается в том, что использование

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

или

STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.ManifestStaticFilesStorage

использует статическое хранилище Django по-другому, чем при работе с сервером. См. Документы Django для некоторого объяснения: https://docs.djangoproject.com/en/1.11/ref/contrib/staticfiles/#django.contrib.staticfiles.storage.ManifestStaticFilesStorage.manifest_strict

Я считаю, что ссылочный манифест создается, когда вы запускаете collectstatic, поэтому это должно временно исправлять эту проблему, но вы, вероятно, не хотите запускать collectstatic перед каждым тестовым запуском, если вы изменили какие-либо статические файлы. Другим решением было бы отключить этот параметр для ваших тестов и просто запустить его в процессе производства.

Ответ 5

Для меня исправить было просто добавление "статической" папки в верхний каталог (myapp/static сделал трюк). Если вы устанавливаете STATIC_URL, но не создали этот каталог, он будет вызывать ошибку, даже если вы не используете этот каталог для ваших статических файлов с whitenoise.

STATIC_URL = '/static/'

Ответ 6

У меня была похожая проблема, но с изюминкой.

Я развернул на pythonanywhere. Если я включаю отладку True, приложение работает нормально. Но если по очереди выполняется отладка False, приложение вылетает с ошибкой, в которой одной строкой является сводка

ValueError: Missing staticfiles manifest entry for 'favicons/favicon.ico'

Я изменил с STATIC_ROOT = 'staticfiles на STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

staticfiles каталог staticfiles, затем повторно staticfiles python manage.py collectstatic.

Теперь приложение работает нормально

Ответ 7

Он работал у меня, комментируя whitenoise в settings.py в процессе производства.

#STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'
#WHITENOISE_ROOT = os.path.join(BASE_DIR, 'staticfiles')

Ответ 8

Я занимался этим вопросом весь день. Оказывается, проблема была в staticfiles каталог staticfiles не был зарегистрирован в git. Я создал фиктивный файл внутри этого каталога, проверил его, и все было хорошо. Я считаю, что это тоже упоминалось где-то в документации по Whitenoise.

Ответ 9

Обязательно проверьте все ваши настройки, относящиеся к статическим файлам, особенно убедитесь, что пути указывают на правильные места. Лично у меня был один из моих STATICFILES_DIRS указывающий на неверный путь.

Ответ 10

Как и у всех остальных, у меня было уникальное решение этой проблемы... оказалось, что у меня был url() в моем файле styles.css с плохим синтаксисом.

Однажды я изменился:

background-image: url( '../images/futura_front_blank_medium.jpg' );

в

background-image: url('../images/futura_front_blank_medium.jpg');

(обратите внимание на небольшую разницу - я удалил пробелы по обе стороны строки)

тогда python manage.py collectstatic работал нормально, и я не получил эту ошибку.

Ответ 11

Псевдоним whitenoise.django.GzipManifestStaticFilesStorage теперь удален. Вместо этого вы должны использовать правильный путь импорта: whitenoise.storage.CompressedManifestStaticFilesStorage.

Согласно документу здесь.