Обновлена документация: финальное решение проблемы Prisma Client

This commit is contained in:
DeepAgent
2025-10-28 08:26:52 +00:00
parent d8378a6dc7
commit e96f49f08f

View File

@@ -1,68 +1,195 @@
# 🔧 Исправление ошибки Prisma Client
# 🔧 Исправление ошибки Prisma Client (Финальное решение)
## Проблема
После добавления `--ignore-scripts` появилась новая ошибка:
## История проблемы
### Попытка #1: --ignore-scripts
После добавления `--ignore-scripts` для ускорения сборки появилась ошибка:
```
Type error: Module '"@prisma/client"' has no exported member 'PrismaClient'.
```
## Причина
**Причина:** `--ignore-scripts` блокирует скачивание бинарных движков Prisma.
### Попытка #2: Переустановка production зависимостей
Убрали переустановку, но Prisma Client все равно не генерировался.
**Причина:** Даже если запустить `prisma generate`, без бинарных движков он не сработает.
### Попытка #3: Генерация без движков
Пытались скачать движки через `prisma version` или генерировать явно.
**Причина:** Движки скачиваются только через postinstall скрипт `@prisma/client`.
## ✅ Финальное решение: Трехшаговая установка
### Концепция
1. **Шаг 1:** Устанавливаем ТОЛЬКО Prisma (2 пакета) **с postinstall**
- Это быстро (~30 секунд), потому что всего 2 пакета
- Postinstall скачает бинарные движки
2. **Шаг 2:** Генерируем Prisma Client
- Движки уже есть, генерация работает
3. **Шаг 3:** Устанавливаем ВСЕ остальные зависимости **с --ignore-scripts**
- Это быстро (3-5 минут), потому что пропускаем компиляцию
- Prisma уже установлен и не трогается
### Код в Dockerfile
После генерации Prisma Client мы **переустанавливали зависимости** командой:
```dockerfile
RUN yarn install --production --ignore-scripts
# ШАГ 1: Устанавливаем ТОЛЬКО Prisma (с postinstall - быстро, ~30 сек)
RUN yarn add prisma@6.7.0 @prisma/client@6.7.0 --exact --network-timeout 300000
# ШАГ 2: Генерируем Prisma Client
RUN npx prisma generate --schema=./prisma/schema.prisma && \
echo "✅ Prisma Client сгенерирован"
# ШАГ 3: Устанавливаем ВСЕ остальные зависимости с --ignore-scripts (быстро!)
RUN yarn install --network-timeout 300000 --ignore-scripts --prefer-offline
# Проверка
RUN test -d node_modules/.prisma/client && \
test -f node_modules/.prisma/client/index.js && \
echo "✅ Prisma Client готов к работе"
```
Это затирало или неправильно устанавливало `@prisma/client`.
## ⏱️ Время сборки
## Решение
Убрали переустановку production зависимостей в `Dockerfile.simple`.
Теперь оставляем все зависимости (включая dev) - это безопаснее для первой сборки.
Также добавлена проверка, что Prisma Client действительно был сгенерирован:
```dockerfile
RUN test -d node_modules/.prisma/client || (echo "ERROR: Prisma Client not generated!" && exit 1)
```
| Этап | Время | Описание |
|------|-------|----------|
| Шаг 1: Prisma | 30-60 сек | Установка 2 пакетов с postinstall |
| Шаг 2: Generate | 10-20 сек | Генерация клиента |
| Шаг 3: Остальное | 3-5 минут | Установка ~100 пакетов без компиляции |
| Сборка Next.js | 3-5 минут | Компиляция приложения |
| **ИТОГО** | **8-12 минут** | ⚡ Вместо 16+ часов! |
## Применение
1. Получите исправление:
### 1. Получите обновление
```bash
cd /home/ubuntu/global_it24_landing
git pull origin master
```
2. Очистите Docker кеш (важно!):
Проверьте, что получили правильную версию:
```bash
git log --oneline -1
# Должно показать: "Исправлено: трехшаговая установка..."
```
### 2. Очистите Docker кеш (ВАЖНО!)
```bash
docker system prune -a
```
3. Запустите сборку:
⚠️ Это критично! Старый кеш может содержать сломанные слои.
### 3. Запустите сборку
```bash
./deploy-simple.sh
```
## Ожидаемый результат
### 4. Мониторинг (опционально)
Сборка должна завершиться успешно без ошибок TypeScript.
Время сборки: 8-12 минут (чуть дольше из-за проверки Prisma).
## Проверка
После успешной сборки:
В другом терминале:
```bash
watch -n 2 "docker ps -a | tail -5"
```
## ✅ Проверка результата
После завершения сборки:
```bash
# Статус
./status.sh
# Логи (не должно быть ошибок Prisma)
./logs.sh
# HTTP проверка
curl http://localhost:3000
```
Вы должны увидеть работающее приложение без ошибок в логах.
Ожидаемый результат:
```
✅ global_it24_web Up 0.0.0.0:3000->3000/tcp
✅ global_it24_db Up 5432/tcp
```
## 🎯 Почему это работает
### Проблема с --ignore-scripts
`--ignore-scripts` пропускает **все** postinstall скрипты, включая:
- ✅ Компиляцию нативных модулей (хорошо - экономия времени)
- ❌ Скачивание бинарных движков Prisma (плохо - ломает Prisma)
### Наше решение
1. Устанавливаем Prisma **отдельно** (без --ignore-scripts)
- Только 2 пакета → быстро
- Postinstall запускается → движки скачиваются
2. Генерируем клиент
- Движки есть → генерация работает
3. Устанавливаем остальное (с --ignore-scripts)
- Prisma уже установлен → Yarn его не трогает
- Остальные пакеты устанавливаются быстро
## ❓ Troubleshooting
### Ошибка "Prisma Client not generated"
Проверьте наличие schema.prisma:
```bash
ls -la /home/ubuntu/global_it24_landing/nextjs_space/prisma/
```
Должен быть файл `schema.prisma`.
### Ошибка при yarn install на шаге 3
Возможно yarn.lock требует обновления:
```bash
cd /home/ubuntu/global_it24_landing/nextjs_space
rm yarn.lock
yarn install
```
Затем закоммитьте:
```bash
cd ..
git add nextjs_space/yarn.lock
git commit -m "Обновлен yarn.lock"
git push origin master
```
### Сборка все еще долгая
Если шаг 1 (установка Prisma) занимает >2 минут:
```bash
# Проверьте интернет
ping -c 3 registry.yarnpkg.com
# Проверьте RAM
free -h
```
Минимум 2GB RAM необходимо.
## 📖 Дополнительно
- **QUICK_FIX.md** - исправление зависания сборки
- **SUMMARY.txt** - полная сводка всех изменений
- **UPDATE_FROM_GIT.md** - обновление проекта
---
**Репозиторий:** git.mscsrv.ru/sa/global_it24_landing.git
**Коммит:** "Исправлена генерация Prisma Client"
**Коммит:** "Исправлено: трехшаговая установка зависимостей для корректной работы Prisma"