트러블 슈팅) Celery가 task를 찾지 못 할 때 ...

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 부분 고쳐주었음...

tasks -> task 로!

결과는?!?!?!

 

응 ~ 똑같아~  젠장 ㅜㅜㅜㅜㅜㅜㅜㅜㅜ

 

  • 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()

찾지 못 해서, 작업을 명시적으로 지정해주었다! 

 

이번에도 ..? 결론은 어쨌든 간단했음요 ...ㅎ

그래도 간만에 제대로된 트러블 슈팅을 한 느낌..!

항상 오타가 난다거나, 내가 뭘 안 했다거나 로 인한 트러블 슈팅이 대부분이었는데,,,

 

 

좋은 트러블 슈팅이었다~! 끄읏~