Q&A
책을 따라하다가 막히는 부분이 있나요?
질문을 남겨주세요.
하지만, 책을 끝까지 읽고 나면 이 페이지도 만드실 수 있을거에요.
교재 p610 makemigrations 질문드립니다.
3 years, 5 months ago
daehoon안녕하세요, 작가님.
집필하신 교재 재밌게 잘 보고 있습니다.
교재를 보던 중 p610, 'sudo docker-compose exec web python manage.py makemigrations' 부분에서 계속해서
오류가 발생하여 여쭤봅니다.
현재 디렉토리에 존재하는 폴더들은 아래와 같습니다.
.env.dev .env.prod.db .gitignore README.md _static django_prj docker-compose.yml nginx single_pages
.env.prod .git Dockerfile _media blog docker-compose.dev.yml manage.py requirements.txt
.env.prod 파일 내부 내용입니다.
DEBUG=0
SECRET_KEY=[본인의 secret key]
DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [공인 IP] [::1]
SQL_ENGINE=django.db.backends.postgresql
SQL_DATABASE=do_it_django_prod
SQL_USER=do_it_django_db_user
SQL_PASSWORD=do_it_django_db_password
SQL_HOST=db
SQL_PORT=5432
DATABASE=postgres
.env.prod.db 파일 내부 내용입니다.
POSTGRES_USER=do_it_django_db_user
POSTGRES_PASSWORD=do_it_django_db_password
POSTGRES_DB=do_it_django_prod
위 두 파일의 내용과 관련이 있나 싶어 노랗게 하이라이트한 부분 재확인 해보았는데 결과는 동일했습니다.
책에 나온 user와 password를 그대로 활용했습니다.
p610의 'sudo docker-compose exec web python manage.py makemigrations'를 실행하자
아래와 같은 에러메시지가 발생했습니다.
Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
self.connect()
File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 200, in connect
self.connection = self.get_new_connection(conn_params)
File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/usr/local/lib/python3.8/site-packages/django/db/backends/postgresql/base.py", line 187, in get_new_connection
connection = Database.connect(**conn_params)
File "/usr/local/lib/python3.8/site-packages/psycopg2/__init__.py", line 127, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: FATAL: role "do_it_django_db_user" does not exist
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "manage.py", line 22, in <module>
main()
File "manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "/usr/local/lib/python3.8/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python3.8/site-packages/django/core/management/__init__.py", line 395, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python3.8/site-packages/django/core/management/base.py", line 330, in run_from_argv
self.execute(*args, **cmd_options)
File "/usr/local/lib/python3.8/site-packages/django/core/management/base.py", line 371, in execute
output = self.handle(*args, **options)
File "/usr/local/lib/python3.8/site-packages/django/core/management/base.py", line 85, in wrapped
res = handle_func(*args, **kwargs)
File "/usr/local/lib/python3.8/site-packages/django/core/management/commands/makemigrations.py", line 101, in handle
loader.check_consistent_history(connection)
File "/usr/local/lib/python3.8/site-packages/django/db/migrations/loader.py", line 290, in check_consistent_history
applied = recorder.applied_migrations()
File "/usr/local/lib/python3.8/site-packages/django/db/migrations/recorder.py", line 77, in applied_migrations
if self.has_table():
File "/usr/local/lib/python3.8/site-packages/django/db/migrations/recorder.py", line 55, in has_table
with self.connection.cursor() as cursor:
File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 259, in cursor
return self._cursor()
File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 235, in _cursor
self.ensure_connection()
File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
self.connect()
File "/usr/local/lib/python3.8/site-packages/django/db/utils.py", line 90, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
self.connect()
File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 200, in connect
self.connection = self.get_new_connection(conn_params)
File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/usr/local/lib/python3.8/site-packages/django/db/backends/postgresql/base.py", line 187, in get_new_connection
connection = Database.connect(**conn_params)
File "/usr/local/lib/python3.8/site-packages/psycopg2/__init__.py", line 127, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: FATAL: role "do_it_django_db_user" does not exist
do_it_django_db_user와 관련해서 파일 간 연결에 문제가 있어서 그런 거 같은데
작가님의 의견을 여쭙고 싶습니다.
감사합니다.
목록보기
taegon 3 years, 5 months ago
안녕하세요.
독자님께서 문제는 정확히 짚으신 것 같습니다. 데이터베이스 접속이 되지 않아서 발생하는 에러로 보이는데요. 혹시 docker-compose.yml 파일도 공유해주실 수 있을까요? 일단 의심스러운 부분은 db 컨테이너를 만드는 과정에서 .env.prod.db의 설정 정보를 이용해서 생성해야 하는데, 이 부분이 제대로 설정되는지는 살펴보려고 합니다. 일단 에러메시지가 출력되는 것을 보면, web 컨테이너, 즉 장고 측에서는 지정한 데이터베이스로 접근을 시도하려는 것으로 보입니다.
아니면 작업하고 계신 깃헙 저장소를 공유해주시면, 제가 직접 테스트해보고 답변 드릴 수 있기도 하구요. 공개가 부담스러우시면, 제 깃헙 계정이 taegon 입니다. private 저장소에 제 계정을 추가해주세요.
고맙습니다.
Updated: May 22, 2021, 2:08 p.m.
daehoon 3 years, 5 months ago
docker-compose.yml 파일
version: '3'
services:
nginx:
build: ./nginx
volumes:
- static_volume:/usr/src/app/_static
- media_volume:/usr/src/app/_mdeia
ports:
- 80:80
depends_on:
- web
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
command: gunicorn django_prj.wsgi:application --bind 0.0.0.0:8000
volumes:
- static_volume:/usr/src/app/_static
- media_volume:/usr/src/app/_media
- ./:/usr/src/app/
expose:
- 8000
env_file:
- ./.env.prod
depends_on:
- db
db:
image: postgres:12.0-alpine
volumes:
- postgres_data:/var/lib/postgresql/data/
env_file:
- ./.env.prod.db
volumes:
postgres_data:
static_volume:
media_volume:
github: hunimoda/django
말씀하신 docker-compose.yml 파일과 깃헙입니다.
감사합니다, 작가님.
Updated: May 24, 2021, 11:46 a.m.
sungyong 3 years, 5 months ago
안녕하세요. 독자님.
.env.prod 에 있는 내용과 현재, docker-compose.yml 내용이 일치하는지 확인해보세요.
지금은 .env.prod가 커밋+푸시 되어 있지 않아서 판단하기가 어렵습니다.
Updated: May 25, 2021, 1:14 a.m.
taegon 3 years, 5 months ago
안녕하세요.
아마 이전 작업에 데이터베이스가 생성이 되어서 볼륨에 저장되어 있는 게 아닌가 추정됩니다. 현재 올려주신 github 소스와 이 글에 첨부해주신 설정 파일로 작업해본 바 문제 없이 실행이 되는 것을 확인하였습니다.
데이터베이스에 중요한 자료가 없다면 (혹은 현재 책을 따라하고 계시다면), 데이터베이스를 지우셔도 문제가 없을 겁니다. 아래 명령으로 할당된 모든 볼륨을 지울 수 있으므로, 볼륨을 지운 후, 도커를 다시 빌드해보시기 바랍니다.
docker volume prune
이후에 볼륨이 지워진 이후, 빌드를 하면 빈 저장소가 생성되어, makemigrations, migrate 등이 정상적으로 동작할 것입니다.
혹시나 문제가 계속 되시면 다시 글 남겨주세요.
고맙습니다.
Updated: May 25, 2021, 12:31 p.m.
2KNG 2 years, 8 months ago
안녕하십니까
비슷한 문제가 발생하여 이 글을 참조하여 시도해보았지만,
문제가 해결되지않아
docker-compose down -v
명령어를 실행한 후
docker volume prune
으로 날려주니 해결되었습니다.
이 글과 작가님 코맨트를 참고하여 블로그에 해결방법을 남겨놓았습니다.(혹시 몰라 링크는 따로 하지않았습니다.)
https://blog.naver.com/khkim1207/222638522508
문제가 된다면 삭제하도록 하겠습니다.
강의는 정말 잘 보고있습니다. 감사합니다!
Updated: Feb. 4, 2022, 10:52 a.m.
Leave a Comment: