Симптом: POST /admin/scrape/kn возвращает task_id, но run_id не появляется в kn_scrape_runs. Причина: зомби-worker оставил Redis-lock с TTL=2h, новые задачи скипаются с reason='lock_held' молча. Backend: - _LOCK_TTL_SECONDS 7200 → 1800 (full sweep ~25-30 мин — потолок). - force_release_lock() helper + новый POST /api/v1/admin/scrape/release-lock. - TriggerKnRequest +force: bool — при true перед apply_async удалить lock. - _log_task_received() / _log_task_skipped() — kn_scrape_log пишет «task подхвачен/skip» с run_id=NULL до основного flow. Теперь UI показывает whether worker реально получил задачу. Frontend: - Чекбокс ⚡ Force в форме запуска. - Кнопка 🔓 Снять Redis-lock (отдельный endpoint). - Уведомление о результате release.
39 lines
673 B
Text
39 lines
673 B
Text
# backend Dockerfile делает целевой `COPY app ./app` (не COPY .), поэтому
|
||
# контекст и так чистый. Но build context передаётся ЦЕЛИКОМ от docker buildx
|
||
# в daemon/builder — лишние мегабайты замедляют upload и хешинг.
|
||
|
||
.venv
|
||
__pycache__
|
||
*.pyc
|
||
.pytest_cache
|
||
.mypy_cache
|
||
.ruff_cache
|
||
tests
|
||
.env
|
||
.env.*
|
||
!.env.example
|
||
|
||
# VCS
|
||
.git
|
||
.gitignore
|
||
.gitattributes
|
||
|
||
# Local data (raw downloads — никогда не нужны в образе)
|
||
data/raw
|
||
data/raw_endpoints
|
||
data/photos
|
||
|
||
# Logs / coverage
|
||
*.log
|
||
.coverage
|
||
htmlcov
|
||
|
||
# Docs / IDE
|
||
*.md
|
||
docs
|
||
.vscode
|
||
.idea
|
||
|
||
# OS
|
||
.DS_Store
|
||
Thumbs.db
|