diff --git a/FIX_PRISMA.md b/FIX_PRISMA.md index fe7e4ad..db33bbb 100644 --- a/FIX_PRISMA.md +++ b/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. Получите исправление: - ```bash - cd /home/ubuntu/global_it24_landing - git pull origin master - ``` +### 1. Получите обновление -2. Очистите Docker кеш (важно!): - ```bash - docker system prune -a - ``` - -3. Запустите сборку: - ```bash - ./deploy-simple.sh - ``` - -## Ожидаемый результат - -Сборка должна завершиться успешно без ошибок TypeScript. - -Время сборки: 8-12 минут (чуть дольше из-за проверки Prisma). - -## Проверка - -После успешной сборки: ```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 Client" +**Коммит:** "Исправлено: трехшаговая установка зависимостей для корректной работы Prisma"