diff --git a/.drone.yml b/.drone.yml index 4c36718..0b08b45 100644 --- a/.drone.yml +++ b/.drone.yml @@ -15,7 +15,7 @@ clone: steps: - name: create data directories commands: - - mkdir -p /data/apple_exchange/redis_data /data/apple_exchange/postgres_data /data/apple_exchange/logs /data/apple_exchange/data /data/apple_exchange/screenshots /data/apple_exchange/shared /data/apple_exchange/playwright_browsers + - mkdir -p /data/apple_exchange/redis_data /data/apple_exchange/postgres_data /data/apple_exchange/logs /data/apple_exchange/data /data/apple_exchange/playwright_browsers - name: deploy to production server commands: diff --git a/backend/.env.example b/backend/.env.example index 3b5db86..a643291 100644 --- a/backend/.env.example +++ b/backend/.env.example @@ -68,7 +68,7 @@ OTEL_MAX_QUEUE_SIZE=2048 # 文件存储配置 UPLOAD_DIR=./data/uploads -SNAPSHOT_DIR=./data/snapshot +SNAPSHOT_DIR=./data/snapshots HTML_DIR=./data/html MAX_FILE_SIZE=16777216 diff --git a/backend/Dockerfile b/backend/Dockerfile index aca7fb8..468576c 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -30,7 +30,7 @@ RUN apt-get update && apt-get install -y \ RUN ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ dpkg-reconfigure -f noninteractive tzdata -RUN mkdir -p /app/data/snapshot /app/data/html /app/data/uploads /app/data/shared /app/logs +RUN mkdir -p /app/data/uploads /app/logs /app/data/playwright-browsers COPY app ./app COPY run.py ./ diff --git a/backend/Dockerfile.worker b/backend/Dockerfile.worker index 1fe0620..8e09820 100644 --- a/backend/Dockerfile.worker +++ b/backend/Dockerfile.worker @@ -33,7 +33,7 @@ COPY --chmod=755 docker-entrypoint.sh ./ RUN uv sync --frozen && \ chmod -R 755 /app/.venv/bin/* -RUN mkdir -p /app/data/snapshot /app/data/html /app/data/uploads /app/data/shared /app/logs /app/data/playwright-browsers +RUN mkdir -p /app/data/uploads /app/logs /app/data/playwright-browsers COPY app ./app COPY scripts ./scripts diff --git a/backend/app/services/playwright_service.py b/backend/app/services/playwright_service.py index 3099199..6850d01 100644 --- a/backend/app/services/playwright_service.py +++ b/backend/app/services/playwright_service.py @@ -678,7 +678,7 @@ class AppleOrderProcessor: wait_stable=True, ): raise Exception("无法点击 continue_to_review") - await page.wait_for_timeout(2000) + await page.wait_for_load_state("networkidle") logger.info(f"{self.thread_prefix} 已处理配送信息") return True except Exception as e: @@ -707,10 +707,16 @@ class AppleOrderProcessor: ): raise Exception("无法点击 place_order") await page.wait_for_timeout(timeout=5000) + await page.wait_for_load_state("networkidle") # 强制等待 max_wait_timeout = 60 while max_wait_timeout >= 0: - if "You’re all set." in await page.content(): + try: + content = await page.content() + except Exception: + continue + + if "You’re all set." in content: logger.info(f"{self.thread_prefix} 订单提交成功") break logger.info( @@ -739,7 +745,7 @@ class AppleOrderProcessor: return True except Exception as e: - logger.error(f"{self.thread_prefix} 订单完成失败: {e}") + logger.error(f"{self.thread_prefix} 订单完成失败: {traceback.format_exc()}") raise e async def _extract_order_info(self, page: Page) -> dict[str, Any]: diff --git a/deploy/docker-compose.production.yml b/deploy/docker-compose.production.yml index 30734d4..09f467e 100644 --- a/deploy/docker-compose.production.yml +++ b/deploy/docker-compose.production.yml @@ -36,7 +36,6 @@ services: - DATABASE_URL=postgresql+asyncpg://postgres:Kp9mX8vL2nQ5wR7@db:5432/apple_exchange - REDIS_URL=redis://:Df4jG7zN9pL1tY3@redis:6379/0 - WORKERS=4 - - SCREENSHOT_DIR=/app/data/snapshot - LOG_DIR=/app/logs volumes: - logs:/app/logs @@ -65,7 +64,6 @@ services: - DATABASE_URL=postgresql+asyncpg://postgres:Kp9mX8vL2nQ5wR7@db:5432/apple_exchange - REDIS_URL=redis://:Df4jG7zN9pL1tY3@redis:6379/0 - WORKER_MAX_CONCURRENT_TASKS=5 - - SCREENSHOT_DIR=/app/data/snapshot - LOG_DIR=/app/logs - PLAYWRIGHT_BROWSERS_PATH=/app/data/playwright-browsers volumes: diff --git a/deploy/docker-compose.swarm.yml b/deploy/docker-compose.swarm.yml index 3e29d15..386a7fa 100644 --- a/deploy/docker-compose.swarm.yml +++ b/deploy/docker-compose.swarm.yml @@ -58,7 +58,6 @@ services: - REDIS_URL=redis://redis:6379/0 - WORKERS=4 - - SCREENSHOT_DIR=/app/data/snapshot - LOG_DIR=/app/logs volumes: - logs:/app/logs @@ -110,7 +109,6 @@ services: - DATABASE_URL=postgresql+asyncpg://postgres:${POSTGRES_PASSWORD}@db:5432/apple_exchange - REDIS_URL=redis://redis:6379/0 - WORKER_MAX_CONCURRENT_TASKS=2 - - SCREENSHOT_DIR=/app/data/snapshot - LOG_DIR=/app/logs - PLAYWRIGHT_BROWSERS_PATH=/app/data/playwright-browsers volumes: diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml index 29a7bd2..8e69db8 100644 --- a/deploy/docker-compose.yml +++ b/deploy/docker-compose.yml @@ -37,7 +37,6 @@ services: - REDIS_URL=redis://redis:6379/0 - WORKERS=4 - - SCREENSHOT_DIR=/app/data/snapshot - LOG_DIR=/app/logs volumes: - logs:/app/logs @@ -66,7 +65,6 @@ services: - DATABASE_URL=postgresql+asyncpg://postgres:password@db:5432/apple_exchange - REDIS_URL=redis://redis:6379/0 - WORKER_MAX_CONCURRENT_TASKS=2 - - SCREENSHOT_DIR=/app/data/snapshot - LOG_DIR=/app/logs - PLAYWRIGHT_BROWSERS_PATH=/app/data/playwright-browsers volumes: