Команда «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>. 

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

 STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage' 

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

6 Solutions collect form web for “Команда «collectstatic» не работает, когда WhiteNoise включен”

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

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

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

 STATIC_ROOT = 'staticfiles' 

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

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

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

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

 STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage' 

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

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

 STATIC_URL = '/static/' 

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

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 перед каждым тестовым запуском, если вы изменили какие-либо статические файлы. Другим решением было бы отключить эту настройку для ваших тестов и просто запустить ее в процессе производства.

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

 #STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage' #WHITENOISE_ROOT = os.path.join(BASE_DIR, 'staticfiles') 
  • Медленная оценка равенства для идентичных объектов (x == x)
  • Что такое переменные аннотации в Python 3.6?
  • Как удалить содержимое файла перед записью в него в сценарии python?
  • Произведите строку из кортежа
  • Почему Python интерпретирует эту строку как словарь при форматировании?
  • Несколько ключей на стоимость
  • Как я могу исправить ValueError: Слишком много значений для распаковки "в Python?
  • Python Tkinter: попытка получить размер виджета
  • Печать без функции newline в функции не работает, как это должно быть в Python
  • Нужно или полезно унаследовать от объекта python в Python 3.x?
  • Как указать, что возвращаемый тип метода такой же, как сам класс в python?
  • Python - лучший язык программирования в мире.