diff --git a/backend/app/services/scrapers/nspd_lite.py b/backend/app/services/scrapers/nspd_lite.py index bd47e76b..b8a8cafa 100644 --- a/backend/app/services/scrapers/nspd_lite.py +++ b/backend/app/services/scrapers/nspd_lite.py @@ -165,11 +165,18 @@ def fetch_via_rosreestr2coord( except ImportError as e: raise NspdLiteError(f"rosreestr2coord не установлен (uv add rosreestr2coord): {e}") from e + # rosreestr2coord по дефолту пишет media-cache в `./tmp/` (относительно CWD). + # У нас CWD = /app, контейнер worker'а запущен под non-root user → Permission + # denied при первом fetch. + # Фикс: use_cache=False + media_path=/tmp/rosreestr2coord (writable для всех). + # Кеш нам не нужен — каждый cad_num уникален, обращаемся раз. a = Area( code=cad_num, area_type=area_type, timeout=timeout, with_log=False, + use_cache=False, + media_path="/tmp/rosreestr2coord", ) try: return a.to_geojson_poly()