API route execution paused
Answered
Brown bear posted this in #help-forum
Brown bearOP
Hey guys, I am running nextjs in Docker and use an API route to do a bit more processing than it would be possible on Vercel due to API route limits. I thought this would be possible when self hosting but the execution of my route is somehow paused in between a function and continues around 3mins later, then stopping completely after this function without any err. The following code is just not executed any more. Any idea why this might happen?
8 Replies
European sprat
Show code and dockerfile
Brown bearOP
api route:
Code of
import type { NextApiRequest, NextApiResponse } from "next";
import {
UploadResponseData,
createUploadHandler,
} from "@/lib/createUploadHandler";
export const config = {
api: {
bodyParser: false,
responseLimit: false,
},
};
export default async function handler(
req: NextApiRequest,
res: NextApiResponse<UploadResponseData>
) {
return createUploadHandler(req, res });
}Code of
createUploadHandler shouldn't be of interest, also because it's working on localhost.Dockerfile:
FROM node:18-alpine AS base
ARG NEXT_PUBLIC_STRIPE_CHECKOUT_URL
ARG NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY
ENV NEXT_PUBLIC_STRIPE_CHECKOUT_URL $NEXT_PUBLIC_STRIPE_CHECKOUT_URL
ENV NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY $NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY
ENV DOCKER true
# 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 yarn global add pnpm && pnpm i --frozen-lockfile; \
else echo "Lockfile not found." && exit 1; \
fi
# Rebuild the source code only when needed
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
# Next.js collects completely anonymous telemetry data about general usage.
# Learn more here: https://nextjs.org/telemetry
# Uncomment the following line in case you want to disable telemetry during the build.
# ENV NEXT_TELEMETRY_DISABLED 1
RUN yarn build
# If using npm comment out above and use below instead
# RUN npm run build
# Production image, copy all the files and run next
FROM base AS runner
WORKDIR /app
RUN yarn global add @svgr/cli
ENV NODE_ENV production
# Uncomment the following line in case you want to disable telemetry during runtime.
# ENV NEXT_TELEMETRY_DISABLED 1
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
RUN mkdir -p /app/data && chown -R nextjs:nodejs /app/data && chmod -R 775 /app/data...
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
USER nextjs
EXPOSE 3000
ENV PORT 3000
CMD ["node", "server.js"]@Brown bear api route:
import type { NextApiRequest, NextApiResponse } from "next";
import {
UploadResponseData,
createUploadHandler,
} from "@/lib/createUploadHandler";
export const config = {
api: {
bodyParser: false,
responseLimit: false,
},
};
export default async function handler(
req: NextApiRequest,
res: NextApiResponse<UploadResponseData>
) {
return createUploadHandler(req, res });
}
Code of `createUploadHandler` shouldn't be of interest, also because it's working on localhost.
European sprat
If you just make this return some text, does it have the same behavior? If it works, then there must be something going on in createUploadHandler
Brown bearOP
well no because text is returned immediately, is there some kind of limit here or is everything disabled with the bodyParser?
and the code runs through on my machine so I guess it has to do with production setup
Brown bearOP
nevermind one function was not properly awaited!
Answer