fix(beat): use /tmp/celerybeat-schedule (workdir /app not writable by app user) #226

Merged
lekss361 merged 1 commit from fix/beat-celerybeat-schedule-permission into main 2026-05-16 19:06:27 +00:00

1 commit

Author SHA1 Message Date
lekss361
718a70f6e9 fix(beat): use /tmp/celerybeat-schedule (workdir /app not writable by app user)
Beat был в restart-loop после force-recreate в PR #225 deploy:
  beat raised exception <class '_gdbm.error'>: error(13, 'Permission denied')
  shelve.py / dbm/__init__.py — попытка создать 'celerybeat-schedule' в CWD.

Root cause
- backend/Dockerfile runner stage: WORKDIR /app создаётся под root → owner root:root.
- COPY --chown=app:app переносит файлы под app, но саму директорию /app не chown'ит.
- USER app → app (uid 1000) не может создавать новые файлы в /app/ (нет write
  permission на parent dir).
- До PR #225 beat container не пересоздавался force-recreate, файл schedule
  существовал в writable forme из inherited state. Force-recreate сбросил.

Fix
- --schedule=/tmp/celerybeat-schedule — /tmp всегда writable.
- Schedule-файл хранит только last_run_at для periodic tasks; потеря на
  container restart OK, beat перестраивает из celery_app.conf.beat_schedule.

Permanent fix (отдельный PR — runner Dockerfile)
- Добавить `chown app:app /app` в runner stage после WORKDIR. Не делаю в
  этом PR — хотфикс минимальный, runner стейдж шарится с FastAPI image и
  worker, риск регрессии больше чем у однострочного --schedule override.
2026-05-16 22:03:45 +03:00