Refactor Prisma migration handling in docker-entrypoint.sh

- Introduced a function to handle schema synchronization with prisma db push.
- Enhanced migration logic to fall back to db push if migration fails with P3005 error.
- Improved logging for migration processes to aid in debugging.
This commit is contained in:
Первов Артем
2026-04-21 00:55:29 +03:00
parent c4e5962912
commit 327d3a95a3

View File

@@ -1,12 +1,37 @@
#!/bin/sh #!/bin/sh
set -eu set -eu
if [ -d "prisma/migrations" ] && [ -n "$(find prisma/migrations -mindepth 1 -maxdepth 1 -type d 2>/dev/null)" ]; then run_db_push() {
echo "Applying Prisma migrations with migrate deploy..." echo "Syncing schema with prisma db push..."
npx prisma migrate deploy
else
echo "No Prisma migrations found, syncing schema with db push..."
npx prisma db push npx prisma db push
}
if [ ! -d "prisma/migrations" ] || [ -z "$(find prisma/migrations -mindepth 1 -maxdepth 1 -type d 2>/dev/null)" ]; then
echo "No Prisma migrations found, syncing schema with db push..."
run_db_push
else
echo "Applying Prisma migrations with migrate deploy..."
MIGRATE_LOG="$(mktemp)"
set +e
npx prisma migrate deploy >"$MIGRATE_LOG" 2>&1
MIGRATE_EXIT=$?
set -e
if [ "$MIGRATE_EXIT" -eq 0 ]; then
cat "$MIGRATE_LOG"
rm -f "$MIGRATE_LOG"
elif grep -q P3005 "$MIGRATE_LOG"; then
cat "$MIGRATE_LOG" >&2
echo "" >&2
echo "prisma migrate deploy failed with P3005: database already has schema but no migration history (typical after prisma db push)." >&2
echo "Falling back to prisma db push so the schema stays in sync." >&2
rm -f "$MIGRATE_LOG"
run_db_push
else
cat "$MIGRATE_LOG" >&2
rm -f "$MIGRATE_LOG"
exit "$MIGRATE_EXIT"
fi
fi fi
exec node dist/src/main.js exec node dist/src/main.js