- config: WORKER_ROLE (sync|jobs|all), INTERACTIVE_CONCURRENCY, BULK_CONCURRENCY. - queue: named queues (interactive/bulk) + enqueue_job() router; sync_bootstrap goes to bulk, all other jobs to interactive. - workers.run: single entrypoint; role=jobs runs both arq consumers (per-queue timeout/concurrency), role=sync runs the supervisor, all=both (dev default). - docker-compose: worker-sync + worker-jobs services (shared image, nofile ulimit); backend/Dockerfile; Makefile worker/worker-sync/worker-jobs targets. - tests repointed to app.queue.get_arq_pool; supervisor behavior unchanged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
24 lines
1.1 KiB
Makefile
24 lines
1.1 KiB
Makefile
up: ## start services
|
|
docker compose -f docker/docker-compose.yml up -d postgres redis meilisearch
|
|
down: ## stop services (data kept)
|
|
docker compose -f docker/docker-compose.yml down
|
|
reset-db: ## DESTRUCTIVE: wipe db + search + blobs, re-migrate
|
|
docker compose -f docker/docker-compose.yml down -v
|
|
rm -rf var/blobs && mkdir -p var/blobs
|
|
docker compose -f docker/docker-compose.yml up -d --wait postgres redis meilisearch
|
|
cd backend && alembic upgrade head
|
|
api:
|
|
uvicorn app.main:create_app --factory --reload --port 8000 --app-dir backend
|
|
worker: ## run both sync + jobs in one process (dev)
|
|
cd backend && WORKER_ROLE=all python -m workers.run
|
|
worker-sync: ## run only the account-sync supervisor
|
|
cd backend && WORKER_ROLE=sync python -m workers.run
|
|
worker-jobs: ## run only the arq job consumers (interactive + bulk)
|
|
cd backend && WORKER_ROLE=jobs python -m workers.run
|
|
web:
|
|
cd frontend && npm run dev
|
|
test:
|
|
cd backend && pytest -q && cd ../frontend && npx vitest run
|
|
mail-test: ## start throwaway IMAP/SMTP server
|
|
docker compose -f docker/docker-compose.yml up -d greenmail
|