Обновлена документация: финальное решение проблемы Prisma Client
This commit is contained in:
187
FIX_PRISMA.md
187
FIX_PRISMA.md
@@ -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'.
|
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
|
```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`.
|
| Шаг 1: Prisma | 30-60 сек | Установка 2 пакетов с postinstall |
|
||||||
Теперь оставляем все зависимости (включая dev) - это безопаснее для первой сборки.
|
| Шаг 2: Generate | 10-20 сек | Генерация клиента |
|
||||||
|
| Шаг 3: Остальное | 3-5 минут | Установка ~100 пакетов без компиляции |
|
||||||
Также добавлена проверка, что Prisma Client действительно был сгенерирован:
|
| Сборка Next.js | 3-5 минут | Компиляция приложения |
|
||||||
```dockerfile
|
| **ИТОГО** | **8-12 минут** | ⚡ Вместо 16+ часов! |
|
||||||
RUN test -d node_modules/.prisma/client || (echo "ERROR: Prisma Client not generated!" && exit 1)
|
|
||||||
```
|
|
||||||
|
|
||||||
## Применение
|
## Применение
|
||||||
|
|
||||||
1. Получите исправление:
|
### 1. Получите обновление
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /home/ubuntu/global_it24_landing
|
cd /home/ubuntu/global_it24_landing
|
||||||
git pull origin master
|
git pull origin master
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Очистите Docker кеш (важно!):
|
Проверьте, что получили правильную версию:
|
||||||
|
```bash
|
||||||
|
git log --oneline -1
|
||||||
|
# Должно показать: "Исправлено: трехшаговая установка..."
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Очистите Docker кеш (ВАЖНО!)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker system prune -a
|
docker system prune -a
|
||||||
```
|
```
|
||||||
|
|
||||||
3. Запустите сборку:
|
⚠️ Это критично! Старый кеш может содержать сломанные слои.
|
||||||
|
|
||||||
|
### 3. Запустите сборку
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
./deploy-simple.sh
|
./deploy-simple.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
## Ожидаемый результат
|
### 4. Мониторинг (опционально)
|
||||||
|
|
||||||
Сборка должна завершиться успешно без ошибок TypeScript.
|
В другом терминале:
|
||||||
|
|
||||||
Время сборки: 8-12 минут (чуть дольше из-за проверки Prisma).
|
|
||||||
|
|
||||||
## Проверка
|
|
||||||
|
|
||||||
После успешной сборки:
|
|
||||||
```bash
|
```bash
|
||||||
|
watch -n 2 "docker ps -a | tail -5"
|
||||||
|
```
|
||||||
|
|
||||||
|
## ✅ Проверка результата
|
||||||
|
|
||||||
|
После завершения сборки:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Статус
|
||||||
./status.sh
|
./status.sh
|
||||||
|
|
||||||
|
# Логи (не должно быть ошибок Prisma)
|
||||||
./logs.sh
|
./logs.sh
|
||||||
|
|
||||||
|
# HTTP проверка
|
||||||
curl http://localhost:3000
|
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
|
**Репозиторий:** git.mscsrv.ru/sa/global_it24_landing.git
|
||||||
**Коммит:** "Исправлена генерация Prisma Client"
|
**Коммит:** "Исправлено: трехшаговая установка зависимостей для корректной работы Prisma"
|
||||||
|
|||||||
Reference in New Issue
Block a user