fastapi와 sqlalchemy admin인 sqladmin을 이용해 celery beat을 admin으로 관리하기
저장소 : https://github.com/bluebamus/fastapi-sqlalchemy-admin-celery
sqlalchemy admin 공식 : https://aminalaee.dev/sqladmin/
관련 포스트 : https://puddingcamp.com/page/c83fd343-190e-4a60-b475-e14438a8978b
sqlalchemy-celery-admin : https://github.com/farahats9/sqlalchemy-celery-beat
sqlalchemy admin 관련 포스트 : https://devspoon.tistory.com/343
문제 정의 : django에서는 celery beat을 설치하면 migration을 통해 테이블의 정의 없이 생성 가능하고 admin을 이용해 접근하여 사용자가 쉽게 관리할 수 있다. 하지만 fastapi에서 celery beat을 설치하면 이러한 지원이 없다. celery와 관련한 2개의 테이블만 생성이 되고 그 외에는 생성이 되지 않는다.
해결 방안 :
1. admin 관리를 django와 같이 쉽게 생성하고 내부 form과 동작을 쉽게 제어할 수 있도록 지원해주는 패키지인 sqlalchemy admin을 설치한다.
pip install sqladmin
2. django와 같이 테이블이 생성되도록 지원하는 오픈소스 패키지인 sqlalchemy-celery-admin를 설치한다.
pip install sqlalchemy-celery-beat
2.1. 실행 방법 (celery는 동작하고 있다는 가정)
$ celery -A tasks beat -S sqlalchemy_celery_beat.schedulers:DatabaseScheduler -l info
- 만약, celeryconfig.py를 사용하고 celery_beat를 설정하였다면,
celery -A tasks beat -l info
3. 관리자 페이지에서 문제 해결
- 일반적인 방법으로는 sqlalchemy-celery-beat의 모델을 가져올 수 없다. 에러가 발생한다.
- 이유는 model_class.__table__.schema가 자동으로 생성되기 때문이다.
- model_class.__table__.schema를 None으로 만들면 해결된다.
model_class = PeriodicTask
model_class.__table__.schema = None