Files
global_it24_landing/FIX_PRISMA.md

196 lines
6.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🔧 Исправление ошибки Prisma Client (Финальное решение)
## История проблемы
### Попытка #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
```dockerfile
# ШАГ 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 готов к работе"
```
## ⏱️ Время сборки
| Этап | Время | Описание |
|------|-------|----------|
| Шаг 1: Prisma | 30-60 сек | Установка 2 пакетов с postinstall |
| Шаг 2: Generate | 10-20 сек | Генерация клиента |
| Шаг 3: Остальное | 3-5 минут | Установка ~100 пакетов без компиляции |
| Сборка Next.js | 3-5 минут | Компиляция приложения |
| **ИТОГО** | **8-12 минут** | ⚡ Вместо 16+ часов! |
## Применение
### 1. Получите обновление
```bash
cd /home/ubuntu/global_it24_landing
git pull origin master
```
Проверьте, что получили правильную версию:
```bash
git log --oneline -1
# Должно показать: "Исправлено: трехшаговая установка..."
```
### 2. Очистите Docker кеш (ВАЖНО!)
```bash
docker system prune -a
```
⚠️ Это критично! Старый кеш может содержать сломанные слои.
### 3. Запустите сборку
```bash
./deploy-simple.sh
```
### 4. Мониторинг (опционально)
В другом терминале:
```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"