Files
global_it24_landing/FIX_PRISMA.md

6.6 KiB
Raw Permalink Blame History

🔧 Исправление ошибки 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

# ШАГ 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)

Наше решение

  1. Устанавливаем Prisma отдельно (без --ignore-scripts)

    • Только 2 пакета → быстро
    • Postinstall запускается → движки скачиваются
  2. Генерируем клиент

    • Движки есть → генерация работает
  3. Устанавливаем остальное (с --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"