인프런 커뮤니티 질문&답변

Uh.D님의 프로필 이미지
Uh.D

작성한 질문수

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트

gunicorn으로 동작시 'latin-1' 에러 발생

해결된 질문

작성

·

530

·

수정됨

0

안녕하세요 개발을 진행하던 중 오류를 겪고 있어서 한가지 여쭤보려고 합니다.
제가 wsgi를 gunicorn으로 서버를 돌리려고 하는데, python manage.py runserver 명령어로 서버를 돌릴때는 에러를 겪지 않고 기능들이 정상작동 되는것을 확인 하였습니다.

하지만, gunicorn으로 서버를 돌리는 경우

'latin-1' codec can't encode characters in position 55-56: ordinal not in range(256)

해당 에러를 겪고 있습니다. (서칭해본 결과 gunicorn은 문자 인코딩을 latin-1로 설정 되어있다고 해서 환경변수를 바꿔주려고 시도를 해보았으나 실패하였습니다. gunicorn --env LANG=en_US.UTF-8 tutorial.wsgi.local:application)

현재 settings, wsgi를 분리해 놓은 상태입니다.

wsgi/local.py

import os
import sys
import importlib

from django.core.wsgi import get_wsgi_application


os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'tutorial.settings.local')
application = get_wsgi_application()

settings/local.py

import os
from .base import *

DEBUG = True

ALLOWED_HOSTS = ['*']

DEFAULT_CHARSET='utf-8'
WSGI_APPLICATION = 'tutorial.wsgi.local.application'

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME':  os.path.join(BASE_DIR , 'db.sqlite3'),
    }, 
}

 

지금 에러를 겪는 기능은 회원가입 기능이며 serealizer.save()에서 에러를 겪는 다고 생각도 듭니다.(전화번호 필드만 양방향 암호화를 설정하였습니다. 암호화, 복호화가능하게) 그러나 runserver후 에는 정상작동이 되기때문에 정확한 원인파악이 어렵습니다. (다른 분들 블로그를 확인하면 gunicorn을 설치하고 따로 설정한게 없이 정상작동 되는거 같습니다.)

gunicorn으로 서버를 돌리는 경우

  1. gunicorn --env LANG=en_US.UTF-8 tutorial.wsgi.local:application --bind 0:8080

  2. gunicorn --bind 0:8080 tutorial.wsgi.local:application

2가지 명령어로도 실행 해보았으나 동일한 에러를 보여주고 있습니다.

회원가입 api로 요청시

header response

 allow: POST,OPTIONS 
 connection: close 
 content-length: 96 
 content-type: application/json 
 date: Mon,27 Feb 2023 05:54:52 GMT 
 referrer-policy: same-origin 
 server: gunicorn 
 vary: Accept,Cookie 
 x-content-type-options: nosniff 
 x-frame-options: DENY 

body response

'latin-1' codec can't encode characters in position 55-56: ordinal not in range(256)

도움을 주신다면 감사하겠습니다.

답변 1

1

이진석님의 프로필 이미지
이진석
지식공유자

안녕하세요.

인코딩 오류의 경우, 어느 지점에서 발생하는 지 확인하는 것이 중요합니다.
단순히 인코딩 자체의 예외메세지 만으로는 파악할 수 있는 것이 없습니다.

프로젝트 코드를 공유해주시면, 저도 gunicorn을 구동해보겠습니다.
제가 재현이 가능해야 답변을 드릴 수 있거든요.

그리고, gunicorn 구동 환경에 대해서도 최대한 자세히 알려주세요.

화이팅입니다. :-)

Uh.D님의 프로필 이미지
Uh.D
질문자

안녕하세요 선생님 인코딩 문제라고 생각하여 지속적으로 원인을 파악하고 있는데, 제가 phone 필드를 암호화 하면서 문제가 발생하고 있는거 같습니다. 이부분은 제가 좀 더 검색과 에러를 겪어보고 그래도 다시 안풀린다면 여쭤보도록 하겠습니다. 그리고 혹시라도 다음번에 질문할 일이 생기면 더 상세하고 정확하게 작성 할 수 있도록 하겠습니다. 화이팅입니다 !!!!!

이진석님의 프로필 이미지
이진석
지식공유자

ㅎㅎ 옙. 차근차근 살펴보시고 질문 주세요.

코드에서 예외가 발생한다면, 예외가 어떤 지점에서 발생했는 지도 파악할 수 있도록 전체 stack trace를 공유해주시고, 프로젝트 코드는 github를 통해서 전체를 공유해주시면 좋습니다. 단편적인 코드만으로는 제가 문제를 재현해볼 수가 없거든요.

화이팅입니다. :-)

Uh.D님의 프로필 이미지
Uh.D

작성한 질문수

질문하기