작성
·
99
0
안녕하세요,
제가 어떤식으로 작동하는지 보고 싶어서 먼저 다운 받아서 실행해봤는데, 이런 에러가 발생합니다.
채팅방 생성까진 되지만 채팅방으로 들어가면 1초후에 팅겨 http://127.0.0.1:8000/chat/ 주소로 자동 이동됩니다.
AttributeError: 'ChatConsumer' object has no attribute 'channel_name'. Did you mean: 'channel_layer'?
WebSocket DISCONNECT /ws/chat/2/chat/ [127.0.0.1:50136]
HTTP GET /chat/ 200 [0.01, 127.0.0.1:50118]
질문 받아주셔서 감사합니다.
답변 2
1
안녕하세요.
self.channel_name 인스턴스 변수는 channels 라이브러리 내부에서 설정해주는 데요. 이는 channel layer 설정이 되었을 때에만 설정해줍니다.
Channels에서는 Redis 백엔드를 지원해주고, Redis를 통해서 채팅 메시지가 유저 간에 전송됩니다. 그래서 반드시 Redis 서버가 필수입니다.
아래 Git 저장소 README.md 에도 관련 설명을 추가했습니다.
https://github.com/pyhub-kr/course-django-channels-basic
로컬에 redis 서버를 설치하신 후에, CHANNEL_LAYER_REDIS_URL 환경변수로 redis 접속정보를 지정하시고, 개발서버를 구동하시면 채팅이 잘 동작하실 것입니다.
살펴보시고 궁금한 점 있으시면 추가 질문 부탁드립니다.
화이팅입니다.
파이썬 사랑방, 이진석 드림
0
안녕하세요, 인프런 AI 인턴입니다. sunnnwo님.
귀하의 문제는 ‘ChatConsumer’ 객체가 ‘channel_name’ 속성을 찾지 못하는 데서 발생하는 것으로 보입니다. 이 문제는 Django Channels에서 ‘channel_name’이 설정되지 않아서 발생할 수 있습니다. 우선, 프로젝트의 consumers.py
에서 ChatConsumer
클래스가 상속받는 AsyncWebsocketConsumer
또는 WebsocketConsumer
클래스의 기본 설정을 확인해 보는 것이 좋습니다. 이 클래스들이 올바르게 상속되고 있는지, 그리고 초기화 시 super를 통해 부모의 초기화를 제대로 호출하고 있는지 확인해 보시기 바랍니다.
유사한 문제에 대한 해결법을 아래의 링크에서 확인할 수 있습니다:
“Redis 설정 문제로 인한 NoneType 오류 발생” - 여기서는 Redis 설정값이 잘못되어 group_add 메서드를 호출할 수 없는 경우가 소개되어 있습니다. Redis 설정이 올바른지 확인해보세요.
“get_channel_layer()를 통한 localhost 호출 문제” - 이 질문에서는 실습 시 get_channel_layer() 함수가 잘못된 값을 반환하여 발생하는 오류를 다룹니다. 이와 유사하게 channels과 관련된 설정이 잘못되었을 가능성이 있습니다.
“웹소켓 관련 비동기 오류” - 이 사례에서는 웹소켓 연결 중 오류가 발생하여 문제를 야기하는 경우에 대해 논의됩니다. 비동기 루프의 문제일 가능성을 생각해볼 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
감사합니다. 좋은 하루 되시길 바랍니다.