8.8 KiB
8.8 KiB
Manual Test Plan — Assets Proxy Debugging
Контекст
Після виправлення HEAD методу в city-service, логотипи та банери все ще не відображаються на фронті. Потрібно перевірити:
- Які URL генерує фронт
- Що реально повертає Next.js route
- Чи web-сервіс оновлений до останнього коду
Крок 1: Перевірка реальних запитів в браузері
1.1 Відкрити DevTools
- Відкрити
https://daarion.space/microdaoу браузері - Відкрити DevTools (F12 або Cmd+Option+I)
- Перейти на вкладку Network
- Фільтр: Img (або All + фільтр за назвою банера/логотипа)
1.2 Знайти "биті" зображення
- Знайти запити до зображень, які не завантажились (червоний статус або placeholder)
- Клікнути по одному з них
- Перевірити:
- Request URL (повний шлях)
- Status (200/404/500/...)
- Response headers →
Content-Type,Content-Length
1.3 Аналіз URL
Якщо URL виглядає як /_next/image?url=...
→ Використовується Next <Image> з оптимізацією
Рішення:
- Або виставити
unoptimizedна компоненті - Або налаштувати
next.config.ts(domains) та переконатися, щоurlвказує на/api/city/assets/proxy/...
Якщо URL виглядає як /api/city/assets/proxy/...
→ Це правильний шлях через proxy
Далі:
- Відкрити цей URL у новій вкладці браузера
- Перевірити:
- Якщо картинка відкривається → проблема в Next
<Image>/ верстці - Якщо не відкривається (404/500 або HTML-сторінка) → проблема в шляху або в проміжному Next route
- Якщо картинка відкривається → проблема в Next
Крок 2: Перевірка оновлення web-сервісу
2.1 Перебудувати web-сервіс
На сервері (там де docker-compose):
cd /opt/microdao-daarion
git pull
docker compose -f docker-compose.web.yml build web
docker compose -f docker-compose.web.yml up -d --no-deps web
2.2 Hard refresh в браузері
Після перебудови:
- Відкрити
https://daarion.space/microdao - Зробити hard refresh:
- Windows/Linux:
Ctrl+Shift+R - Mac:
Cmd+Shift+R
- Windows/Linux:
Крок 3: Перевірка шляху в proxy
3.1 Скопіювати точний path
З Network tab в DevTools:
- Знайти запит до
/api/city/assets/proxy/... - Скопіювати точний path після
/api/city/assets/proxy/
Наприклад: microdao/banner/xyz.png
3.2 Перевірка через city-service
На сервері (там де city-service):
# Перевірка через city-service (внутрішній Docker network)
docker exec daarion-city-service curl -i "http://localhost:7001/city/assets/proxy/microdao/banner/xyz.png"
3.3 Перевірка напряму у MinIO
# Перевірка напряму у MinIO (якщо є NGINX/MinIO url)
curl -I "https://assets.daarion.space/daarion-assets/microdao/banner/xyz.png"
3.4 Аналіз результатів
- Якщо другий запит (на MinIO) 200, а перший ні → проблема в:
normalizeAssetUrlнеправильно обрізає/додаєdaarion-assets/- Next route/NGINX "з'їдає" частину шляху
Примітка: Банери часто лежать в іншому префіксі, ніж логотипи, тому:
- Для логотипів
normalizeAssetUrlможе працювати (структура шляху співпала) - Для банерів — ні (інший префікс, додатковий каталог, інший формат збереження в БД)
Крок 4: Перевірка логів
4.1 Логи city-service
docker logs daarion-city-service | grep "assets/proxy"
Перевірити:
- Чи є запити на
/city/assets/proxy/... - Який статус (200/404/500)
- Чи є помилки
4.2 Логи web-сервісу
docker logs daarion-web | grep -E "assets|proxy|image"
Перевірити:
- Чи є запити на
/api/city/assets/proxy/... - Чи є помилки в Next.js route
Крок 5: Перевірка normalizeAssetUrl
5.1 Перевірка вхідних даних з БД
# Отримати URL з БД для конкретного MicroDAO
curl -s "https://daarion.space/api/city/microdao/daarion" | jq '{logo_url, banner_url}'
5.2 Перевірка нормалізації
В браузері (Console в DevTools):
// Тест normalizeAssetUrl
const testUrl = "https://assets.daarion.space/daarion-assets/microdao/logo/2025/12/02/abc123.png";
// Очікуваний результат: "/api/city/assets/proxy/microdao/logo/2025/12/02/abc123.png"
Очікувані результати
✅ Успішний сценарій
-
Network tab:
- URL:
/api/city/assets/proxy/microdao/logo/2025/12/02/abc123.png - Status:
200 OK - Content-Type:
image/png - Зображення відображається
- URL:
-
Логи city-service:
INFO: "GET /city/assets/proxy/microdao/logo/2025/12/02/abc123.png HTTP/1.1" 200 OK -
Прямий доступ до URL:
- Відкривається зображення в новій вкладці
❌ Проблемні сценарії
Сценарій 1: 404 Not Found
Симптоми:
- Status:
404 - Response:
Asset not found
Можливі причини:
- Файл не існує в MinIO
- Неправильний path (зайвий/відсутній префікс
daarion-assets/) - Неправильна нормалізація URL
Рішення:
- Перевірити чи файл існує в MinIO
- Перевірити
normalizeAssetUrlконтракт - Перевірити шлях в БД
Сценарій 2: 405 Method Not Allowed
Симптоми:
- Status:
405 - Response:
Method Not Allowed
Можливі причини:
- HEAD метод не підтримується (має бути виправлено)
- Next.js route не має HEAD handler
Рішення:
- Перевірити чи city-service має оновлений код
- Перевірити чи Next.js route має HEAD handler
Сценарій 3: 500 Internal Server Error
Симптоми:
- Status:
500 - Response:
Internal Server Error
Можливі причини:
- Помилка в city-service при доступі до MinIO
- Неправильні ENV змінні (MINIO_ENDPOINT, MINIO_ACCESS_KEY, тощо)
Рішення:
- Перевірити логи city-service
- Перевірити ENV змінні в docker-compose
Сценарій 4: Зображення не відображається, але статус 200
Симптоми:
- Status:
200 OK - Content-Type правильний
- Але зображення не відображається
Можливі причини:
- Next
<Image>з оптимізацією блокує - CSS/верстка приховує зображення
- CORS проблема
Рішення:
- Перевірити чи використовується
<img>або<Image> - Перевірити CSS стилі
- Перевірити CORS headers
Чек-лист для швидкої перевірки
- Web-сервіс перебудовано з останнім кодом
- Hard refresh в браузері виконано
- Network tab показує запити на
/api/city/assets/proxy/... - Статус запитів:
200 OK - Content-Type:
image/pngабоimage/jpeg - Прямий доступ до URL відкриває зображення
- Логи city-service показують успішні запити
normalizeAssetUrlправильно конвертує URL з БД
Наступні кроки після тестування
- Зафіксувати результати тестування
- Якщо є проблеми — зібрати:
- Точні URL з Network tab
- Логи city-service та web-сервісу
- Приклади URL з БД
- Передати інформацію для подальшого виправлення