Обновлена документация: финальное решение проблемы 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'.
|
||||
```
|
||||
|
||||
## Причина
|
||||
**Причина:** `--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"
|
||||
|
||||
Reference in New Issue
Block a user