2024. 11. 14. 20:55ㆍ문제해결
급하신 분들은 ? 맨 밑에 해결 부분만 보세유~
사건
원래 나는 redis 관련 오류를 해결중이었다 ...
그러던 중 docker를 실행했는데... keyerror가 떠버렸다!

KeyError: 'chat.tasks.save_messages_to_db'
redis 관련 트러블 슈팅이 보고싶다면?
https://hsjoo126.tistory.com/74
트러블 슈팅) 왜 레디스가 실행되지 않을까 ? feat.도커 ...
사건내가 하고 싶은 건 python manage.py test 였다.test 파일을 만들고 잘 되는지! 실행을 시켜보고싶었는데 ? 단 하나도 실행되지 않고 에러가 떠버렸다 현상redis.exceptions.ConnectionError: Error 8 connecting to
hsjoo126.tistory.com
자 다시 이어서 ...
아니 이게 뭐람...?
친절하신 gpt 슨생님 왈....
이 오류는 Celery가 해당 작업을 인식하지 못하고 있다는 것을 나타냅니다.
아하! 그렇구나! 아니 대체 왜 ????
task.py에 잘 들어있음!!

내가 테스트 하려는 작업을 잘 import도 해옴!

모야... 아니 들어있잖아 .. 왜 못 찾는다는 건데 대체 왜 ...
시도
- 다시 시작하기
원래 오류나면 국룰은 껐다 키기 아니겠어 ??

네.. 똑같읍니다...
- 파일 이름 고치기
아니 에러 메세지를 보다 보니까, chat.tasks.~~ 에서 찾고있는 것임!
어라? 근데 난 tasks 가 아니라 task로 되어있는데 ?

하하 ... 그럴 수 있지 ! import 하는 부분에서 s를 빼보았다!

settings.py 에서도 beat 부분 고쳐주었음...


결과는?!?!?!

응 ~ 똑같아~ 젠장 ㅜㅜㅜㅜㅜㅜㅜㅜㅜ
- task를 무조건!! 찾을 수 있게 만들어주기!
celery.py 에 task가 어느 앱 안에 있는지 직접적으로 명시도 해보고
from celery import Celery
app = Celery('ChatDay')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks(['chat.tasks'])
task 에 이름을 부여해
from celery import shared_task
@shared_task(name="save_messages_to_db")
def save_messages_to_db():
#작업~~~
celery.py에 아예 task를 넣어버리기도 했다
from celery import Celery
app = Celery('ChatDay')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.send_task('save_messages_to_db')
app.autodiscover_tasks(['chat.tasks'])
결과는 ?!?!?!?
응 안 돼~
해결
생각보다 해결책은 간단했는데, settings.py에 한 줄만 추가해주었다.

CELERY_IMPORTS = ('앱이름.tasks',)
원래 celery가 이 명령어로 작업을 자동으로 다 찾을 수 있어야하는데
app.autodiscover_tasks()
찾지 못 해서, 작업을 명시적으로 지정해주었다!
이번에도 ..? 결론은 어쨌든 간단했음요 ...ㅎ
그래도 간만에 제대로된 트러블 슈팅을 한 느낌..!
항상 오타가 난다거나, 내가 뭘 안 했다거나 로 인한 트러블 슈팅이 대부분이었는데,,,
좋은 트러블 슈팅이었다~! 끄읏~