6.6 KiB
🔧 Исправление ошибки 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: Устанавливаем ТОЛЬКО Prisma (2 пакета) с postinstall
- Это быстро (~30 секунд), потому что всего 2 пакета
- Postinstall скачает бинарные движки
-
Шаг 2: Генерируем Prisma Client
- Движки уже есть, генерация работает
-
Шаг 3: Устанавливаем ВСЕ остальные зависимости с --ignore-scripts
- Это быстро (3-5 минут), потому что пропускаем компиляцию
- Prisma уже установлен и не трогается
Код в 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. Получите обновление
cd /home/ubuntu/global_it24_landing
git pull origin master
Проверьте, что получили правильную версию:
git log --oneline -1
# Должно показать: "Исправлено: трехшаговая установка..."
2. Очистите Docker кеш (ВАЖНО!)
docker system prune -a
⚠️ Это критично! Старый кеш может содержать сломанные слои.
3. Запустите сборку
./deploy-simple.sh
4. Мониторинг (опционально)
В другом терминале:
watch -n 2 "docker ps -a | tail -5"
✅ Проверка результата
После завершения сборки:
# Статус
./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)
Наше решение
-
Устанавливаем Prisma отдельно (без --ignore-scripts)
- Только 2 пакета → быстро
- Postinstall запускается → движки скачиваются
-
Генерируем клиент
- Движки есть → генерация работает
-
Устанавливаем остальное (с --ignore-scripts)
- Prisma уже установлен → Yarn его не трогает
- Остальные пакеты устанавливаются быстро
❓ Troubleshooting
Ошибка "Prisma Client not generated"
Проверьте наличие schema.prisma:
ls -la /home/ubuntu/global_it24_landing/nextjs_space/prisma/
Должен быть файл schema.prisma.
Ошибка при yarn install на шаге 3
Возможно yarn.lock требует обновления:
cd /home/ubuntu/global_it24_landing/nextjs_space
rm yarn.lock
yarn install
Затем закоммитьте:
cd ..
git add nextjs_space/yarn.lock
git commit -m "Обновлен yarn.lock"
git push origin master
Сборка все еще долгая
Если шаг 1 (установка Prisma) занимает >2 минут:
# Проверьте интернет
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"