복붙노트

[PYTHON] WhiteNoise가 활성화되면 'collectstatic'명령이 실패합니다.

PYTHON

WhiteNoise가 활성화되면 'collectstatic'명령이 실패합니다.

나는 Heroku의 권고에 따라 WhiteNoise를 통해 정적 파일을 제공하려고 노력하고 있습니다. 내 개발 환경에서 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'

여기서 무엇이 잘못되고 어떻게 해결할 수 있습니까? 이미 정적 파일 출력 폴더를 비우려고했습니다. 하나의 특정 파일 처리가 시작될 때까지 원활하게 실행됩니다.

해결법

  1. ==============================

    1.여기서 문제는 css / iconic / open-iconic-bootstrap.css가 예상 위치에 존재하지 않는 open-iconic.eot 파일을 참조하고 있다는 것입니다.

    여기서 문제는 css / iconic / open-iconic-bootstrap.css가 예상 위치에 존재하지 않는 open-iconic.eot 파일을 참조하고 있다는 것입니다.

    해당 스토리지 백엔드로 collectstatic을 실행하면 Django는 CSS 파일의 모든 URL을 다시 작성하려고 시도하므로 새 이름 (예 : css / iconic / open-iconic.8a7442ca6bed.eot)으로 파일을 참조합니다. 파일을 찾을 수 없으면 해당 오류로 중지됩니다.

  2. ==============================

    2.난 그냥이 같은 문제가 있었고 내 설정 파일 에서이 줄을 제거하여 고정,

    난 그냥이 같은 문제가 있었고 내 설정 파일 에서이 줄을 제거하여 고정,

    STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'
    

    Heroku 설명서 페이지에서이 줄을 얻었습니다.

  3. ==============================

    3.Heroku 문서를 신뢰할 수 있기 때문에 .css 파일이 모두 존재할 때이 .css 파일이 누락되었다고 주장하면서이 오류가 발생했습니다.

    Heroku 문서를 신뢰할 수 있기 때문에 .css 파일이 모두 존재할 때이 .css 파일이 누락되었다고 주장하면서이 오류가 발생했습니다.

    STATIC_ROOT = 'staticfiles'
    

    WhiteNoise 문서를 통해 :

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

    수정 사항은 간단하지만 Heroku가 자신의 문서를 수정하기 전까지 (필자가 의견을 제출 함) 적어도 솔루션이 SO에 표시되는지 확인하십시오.

  4. ==============================

    4.여기서 문제는

    여기서 문제는

    STATICFILES_STORAGE = 'whiteno.storage.CompressedManifestStaticFilesStorage'

    또는

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

    Django의 정적 파일 저장소를 runserver와 다른 방식으로 사용합니다. Django 문서에서 설명을 참조하십시오.

    필자는 collectstatic을 실행할 때 참조 된 매니페스트가 빌드되므로 임시로이 문제를 해결해야하지만 정적 파일을 수정 한 경우 모든 테스트를 실행하기 전에 collectstatic을 실행하지 않으려한다고 생각합니다. 또 다른 해결책은 테스트에서이 설정을 사용하지 않고 프로덕션 환경에서 실행하는 것입니다.

  5. ==============================

    5.나에게있어 수정 프로그램은 단순히 최상위 디렉토리에 '정적'폴더를 추가하는 것이다 (myapp / static은 트릭을 수행했다). STATIC_URL을 설정했지만 해당 디렉토리가 이미 작성되지 않은 경우, whitenoise가있는 정적 파일에 해당 디렉토리를 사용하지 않더라도 오류가 발생합니다.

    나에게있어 수정 프로그램은 단순히 최상위 디렉토리에 '정적'폴더를 추가하는 것이다 (myapp / static은 트릭을 수행했다). STATIC_URL을 설정했지만 해당 디렉토리가 이미 작성되지 않은 경우, whitenoise가있는 정적 파일에 해당 디렉토리를 사용하지 않더라도 오류가 발생합니다.

    STATIC_URL = '/static/'
    
  6. ==============================

    6.그것은 생산을위한 settings.py에서 whitenoise를 주석 처리하여 저에게 도움이되었습니다.

    그것은 생산을위한 settings.py에서 whitenoise를 주석 처리하여 저에게 도움이되었습니다.

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

    7.비슷한 문제가 있었지만 비틀어졌습니다.

    비슷한 문제가 있었지만 비틀어졌습니다.

    pythonanywhere에 배포했습니다. True로 설정하면 app이 정상적으로 실행됩니다. 하지만 한 번 디버깅을 False로 설정하면 앱이 충돌하여 한 줄이 요약 된 오류가 발생합니다.

    ValueError : 'favicons / favicon.ico'에 대한 항목이없는 staticfiles 매니페스트 항목

    STATIC_ROOT = 'staticfiles에서 STATIC_ROOT = os.path.join (BASE_DIR,'staticfiles ')으로 변경되었습니다.

    staticfiles 디렉토리를 삭제 한 다음 python manage.py collectstatic을 다시 실행하십시오.

    이제 앱이 잘 돌아갑니다.

  8. ==============================

    8.저는 하루 종일이 문제를 다루었습니다. staticfiles 디렉토리가 git에 체크인되지 않았 음이 밝혀졌습니다. 나는이 디렉토리 안에 더미 파일을 만들었고, 그것을 체크인했다. 이것은 Whitenoise 문서의 어딘가에서 언급되었다고 나는 믿는다.

    저는 하루 종일이 문제를 다루었습니다. staticfiles 디렉토리가 git에 체크인되지 않았 음이 밝혀졌습니다. 나는이 디렉토리 안에 더미 파일을 만들었고, 그것을 체크인했다. 이것은 Whitenoise 문서의 어딘가에서 언급되었다고 나는 믿는다.

  9. from https://stackoverflow.com/questions/26829435/collectstatic-command-fails-when-whitenoise-is-enabled by cc-by-sa and MIT license