tiny-stack icon indicating copy to clipboard operation
tiny-stack copied to clipboard

drizzle migration script missing?

Open deadcoder0904 opened this issue 4 months ago • 1 comments

this is really great.

i have been trying to make sqlite work with docker with no luck because my migration script doesn't create database in the right place for some reason. it creates it only when i run the application & interact with database but then it creates no tables.

i was wondering where do you do migrations as i can't seem to find drizzle:migrate script that generates db. i saw you had a knex:migrate beforehand in git history but nowhere drizzle migrations are found.

i'm using the same stack except next.js instead of astro so was wondering the same. my database somehow doesn't create table after running npm run db:migrate:prod. can you tell why?

FROM node:20-alpine AS base

# 1. Install dependencies only when needed
FROM base AS deps
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
RUN apk add --no-cache libc6-compat

WORKDIR /app

# Install dependencies based on the preferred package manager
COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./
RUN \
  if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
  elif [ -f package-lock.json ]; then npm ci; \
  elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm i; \
  else echo "Lockfile not found." && exit 1; \
  fi


# 2. Rebuild the source code only when needed
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules

COPY . .

# This will do the trick, use the corresponding env file for each environment.
COPY .env.production .env.production
RUN ls
RUN mkdir -p /data
RUN ls
ENV NODE_ENV=production
ENV NEXT_TELEMETRY_DISABLED=1
# Generate migration files
RUN npm run db:generate
# COPY /src/app/db/migrations ./migrations
# Create /data/users.prod.sqlite using Volume Mount
RUN npm run db:migrate:prod
RUN ls
RUN npm run build

# 3. Production image, copy all the files and run next
FROM base AS runner
WORKDIR /app

ENV NODE_ENV=production
ENV NEXT_TELEMETRY_DISABLED=1

RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001

COPY --from=builder /app/public ./public

# Automatically leverage output traces to reduce image size
# https://nextjs.org/docs/advanced-features/output-file-tracing
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static

# Move the drizzle directory to the runtime image
COPY --from=builder --chown=nextjs:nodejs /app/src/app/db/migrations ./migrations

USER nextjs

EXPOSE 3000

# ENV PORT 3000
# ENV HOSTNAME localhost

CMD ["node", "server.js"]

bdw, I have to run npm run db:migrate:prod before I do npm run build because next.js production builds need a database in order to build for some reason. i'm wondering how do you manage to skip that part unless astro doesn't need to call database?

deadcoder0904 avatar Feb 17 '24 07:02 deadcoder0904