dokku를 사용하여 Django 앱을 배포할 때 Collectstatic 구성 오류 발생
-
21-12-2019 - |
문제
dokku를 사용하여 Django 앱을 배포할 때 다음 오류가 발생합니다.
Collectstatic configuration error. To debug, run:
$ heroku run python ./manage.py collectstatic --noinput
나는 달릴 방법을 찾지 못했다 heroku run python ./manage.py collectstatic --noinput
dokku 컨테이너의 경우, 하지만 시도할 때 dokku run my app python ./manage.py collectstatic --noinput
, 정적 파일이 성공적으로 복사되었습니다. STATIC_ROOT
폴더가 있고 오류 메시지가 표시되지 않습니다.
배치하여 문제를 해결할 수 있습니다. collectstatic
명령을 내리다 Procfile
:
web: python manage.py collectstatic --noinput ; gunicorn myapp.wsgi
그래도 문제의 원인이 무엇인지, 어떻게 디버깅할 수 있는지 알고 싶습니다.어떤 아이디어가 있나요?
해결책
settings.py 파일에는 다음과 같은 네 가지 설정이 있어야 합니다. MEDIA_ROOT
, MEDIA_URL
, STATIC_ROOT
그리고 STATIC_URL
.
나는 다음과 같이 설정했습니다.
MEDIA_ROOT = 'media'
STATIC_ROOT = 'static'
MEDIA_URL = '/media'
STATIC_URL = '/static'
생성된 Docker 컨테이너 내에서 미디어 경로 /app/media/와 정적 경로 /app/static/을 만드는 /app 아래에서 애플리케이션을 찾을 수 있습니다.
불행하게도 git에 커밋된 미디어 및 정적 폴더가 없으면 /app 아래에 자동으로 생성되지 않습니다.
git에서는 빈 폴더를 커밋하는 것을 허용하지 않으므로(파일만 커밋) 프로젝트에서 다음을 수행합니다.
mkdir media static
touch media/.dir
touch static/.dir
git add media/.dir static/.dir
git commit -m 'Make media and static directories'
'touch' 명령은 빈 파일을 생성한 다음 새로 생성된 두 파일을 'git add'하고 체크인합니다.
이제 푸시하면 미디어와 정적 파일을 포함하는 디렉터리가 생성됩니다.'git push'를 할 때마다 새로운 컨테이너가 생성되고 이전 컨테이너는 파기된다는 점을 명심하세요.정적 파일에는 문제가 되지 않지만, 미디어를 다른 곳에 저장하지 않으면 미디어가 손실됩니다.