From 9ad109e02a46fc5ec429f9cfd119874179afcc2d Mon Sep 17 00:00:00 2001 From: ackFromRedmi Date: Fri, 3 Apr 2026 02:08:46 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=B5=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=D0=BB=D0=B8=20=D0=BC=D0=B0=D1=82=D0=BF=D0=BB=D0=BE=D1=82?= =?UTF-8?q?=D0=BB=D0=B8=D0=B1=20=D0=B8=20=D0=B5=D0=B7=D0=B4=D1=85=D1=84=20?= =?UTF-8?q?=D1=81=D1=82=D0=B0=D0=B2=D0=B8=D0=BC=20=D0=B1=D0=B8=D0=B1=D0=BB?= =?UTF-8?q?=D0=B8=D0=BE=D1=82=D0=B5=D0=BA=D0=B8=20=D0=BF=D1=80=D0=B8=20?= =?UTF-8?q?=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B5=20=D0=BE=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D0=B7=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 5 ++++- shiftflow/views.py | 6 +++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 223ac85..e1cd41f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,7 +16,10 @@ ENV PYTHONUNBUFFERED=1 # gcc и libpq-dev — необходимы для сборки библиотеки psycopg2 (драйвер для Postgres). # rm -rf /var/lib/apt/lists/* — удаляем кэш установщика, чтобы уменьшить размер образа. RUN apt-get update && apt-get install -y --no-install-recommends \ - gcc libpq-dev && rm -rf /var/lib/apt/lists/* + gcc libpq-dev \ + libfreetype6 libpng16-16 \ + fonts-dejavu-core \ + && rm -rf /var/lib/apt/lists/* # Сначала копируем только список зависимостей. # Это нужно для "кэширования слоев": если ты не менял библиотеки, Docker не будет переустанавливать их заново при сборке. diff --git a/shiftflow/views.py b/shiftflow/views.py index 8190fc5..a1e5e1e 100644 --- a/shiftflow/views.py +++ b/shiftflow/views.py @@ -70,7 +70,11 @@ def _render_dxf_preview_png( from ezdxf.addons.drawing.matplotlib import MatplotlibBackend from ezdxf.addons.drawing import config as draw_config except Exception as e: - raise RuntimeError('Не установлены зависимости для превью DXF: ezdxf и matplotlib') from e + # Важно: сюда попадают не только «пакет не установлен», но и ошибки импорта из-за системных библиотек + # (например, не хватает freetype/png в slim-образе). Поэтому сохраняем первопричину в тексте исключения. + raise RuntimeError( + f"Не удалось импортировать зависимости для превью DXF (ezdxf/matplotlib): {type(e).__name__}: {e}" + ) from e if not dxf_path or not os.path.exists(dxf_path): raise FileNotFoundError('DXF файл не найден')