증상: 로컬에서 이미지필드에 있는 파일 로딩 잘되었는데 aws-nginx  배포환경에서 로딩이 안되었다


src

-a app

-b app

-c app

-src

-urls.py

-settings.py

-static

-images

-js

-www

static

-media

-images

-js

-www

manage.py

mysite.nginx.conf

uwsgi.ini


settings.py
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR),"static") #개발시 스태틱파일을 모아서 복사해줄 디렉토리

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR),"static", "media")

STATICFILES_DIRS = [
os.path.join(os.path.dirname(BASE_DIR),"static", "static_dirs"),
os.path.join(os.path.dirname(BASE_DIR),"static", "media"),
]

nginx 설정

아래는 잘되는 옵션

location /static {
root /home/ubuntu; # your Django project's static files - amend as required
}

아래는 안됨

location /static {
root /home/ubuntu/static; # your Django project's static files - amend as required
}

ubuntu/static 까지 포함하면 이미지 로딩이 안됨 즉 ubuntu 까지만 경로적어줘야함



스태틱파일 세팅은 

여기서 스태틱파일은 각종 이미지 파일 들인데 (템플릿에서 불러올) 

경로는  /home/ubuntu

/home/ubuntu/static 내에 

static_dirs, static_root, media, media/images, admin, js, www 이런 하위 디렉토리가 있는데 특히

www

-css

-fonts

-js

-images

등이 있는데 여기에 하위에 있는 각종 js를 로딩하거나 이미지를 로딩하려면 nginx 에서 location /static{ }

파트에서 경로를 설정해줘야 한다

앞에 옵션에 root , alias 가 있는데 alias 는 이미지가 안불려지고 root 를 붙여야 이미지 로딩이 된다. 왜 그런지는??

static 경로는 빼고 적어준다 root /home/ubuntu

static경로가 포함되면 로딩이 안된다


이미지가 업로드가 되는 경로는 /home/ubuntu/static/media/images 이다

class Category(models.Model):
title=models.CharField(max_length=120)
description=models.TextField(max_length=5000, null=True, blank=True)
tags=GenericRelation("TaggedItem", null=True, blank=True)
slug=models.SlugField(default='abc', unique=True)
image=models.ImageField(upload_to='images/', null=True, blank=True)

업로드되는 이미지를 로딩하려면  nginx 에서 경로를 잡아줘야 한다??? 이것은 location /media {}

파트에서 경로를 설정해줘야 한다? 그런줄 알았는데...

그런데 이 미디어 경로는 안 정해줘도 잘 로딩되는듯하다

미디어 경로를 주석처리해도 잘 작동하고, 앞에 옵션에 root , alias 둘다 작동됨을 확인

media 경로는 포함하든 안하든 잘 작동한다

아마도 미디어 경로를 설정안해줘도

스태틱경로에서 미디어까지 커버되어 사용자가 업로드한 이미지를 로딩해주는듯 하다


잘된다 아래, 미디어경로를 포함해도 잘되는듯
location /media  {
alias /home/ubuntu/static/media; # your Django project's media files - amend as required, alias
}


아래는 잘안됨. (root옵션 안되는듯)

location /media  {
root /home/ubuntu/static/media; # your Django project's media files - amend as required, alias
}


아래도 잘됨 미디어경로를 포함안해도 잘되는듯

location /media  {
alias /home/ubuntu/static; # your Django project's media files - amend as required, alias
}

그리고 이미지 불러올 템플릿파일에서 이미지로딩을 해준다


<img src="{%if q.image %}{{q.image.url}}{%endif%}" class="img-responsive"></a>

{{q.image.url}} 여기서 q는 오브젝트 . 즉 오브젝트의 이미지필드의 url 을 불러오라는 얘기다

그러면 media/images/이미지경로를 불러온다









+ Recent posts