Django Storage 2

셸을 dev로 만들고 ./manage.py runserver 0:8000을 하면 WSGI APPLICATION을 로드 하지 못했다는 에러가 발생한다.

runserver <command>가 실행 될때 runserver.pyCommand class 가 실행된다. 마지막에 get_handler 가 실행되면서 get_internal_wsgi_applications() 를 리턴 한다. 이것은 현재 settings모듈에서 WSGI_APPLICATION이 있으면 꺼내 오는 함수다. 없으면 조금 전과 같은 에러를 발생 시킨다.

그렇다면 django.conf.settings.WSGI_APPLICATION을 꺼내 온 것과 같은 것이다.

base.py에 보면 WSGI_APPLICATION = 'config.wsgi.application' 가 있다. 이것을 개발 환경별로 또 빼주면 된다.

# local.py
WSGI_APPLICATION = 'config.wsgi.local.application'
# dev.py
WSGI_APPLICATION = 'config.wsgi.dev.application'
# production.py
WSGI_APPLICATION = 'config.wsgi.production.application'

이제 deploy-ec2를 하고 ./manage.py runserver 0:8000을 하고 파일을 올려보면 s3에 파일이 제대로 올라가는것을 볼 수 있다.

admin에서 파일을 지워도 s3에서는 지워지지 않는다. 일종의 안정 장치 인거 같은데 admin에서 지우면 s3에서도 지워지게 만들어 보자 delete_post 시그널을 이용하자

# .photo.models.py
@receiver(post_delete, sender=Photo)
def model_post_delete(sender, instance, **kwargs):
    default_storage.delete(instance.__dict__['file'])

Comments