"ENOENT: no such file or directory, open '/var/task/src/schema.prisma'" - Serverless & Prisma

Viewed 247

I've been trying to get deploy an app running express, ts & prisma, using serverless.

I keep running into the following error:

Invoke Error {
  errorType: "Error"
  errorMessage: "ENOENT: no such file or directory, open '/var/task/src/schema.prisma'"
  code: "ENOENT"
  errno: -2
  syscall: "open"
  path: "/var/task/src/schema.prisma"
  clientVersion: "4.2.1"
  stack: [
    0: "Error: ENOENT: no such file or directory, open '/var/task/src/schema.prisma'"
    1: "    at Object.openSync (fs.js:498:3)"
    2: "    at Object.readFileSync (fs.js:394:35)"
    3: "    at new LibraryEngine (/var/task/src/handler.js:190:3090)"
    4: "    at r.getEngine (/var/task/src/handler.js:278:3907)"
    5: "    at new PrismaClient (/var/task/src/handler.js:278:3323)"
    6: "    at /var/task/src/handler.js:627:602060"
    7: "    at /var/task/src/handler.js:627:602289"
    8: "    at Object.<anonymous> (/var/task/src/handler.js:627:602521)"
    9: "    at Module._compile (internal/modules/cjs/loader.js:1085:14)"
    10: "    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)"
  ]
}

this is my handler.ts

import serverlessHttp from 'serverless-http';

import { app } from './app';

export const handler = serverlessHttp(app);


<!-- end s

<!-- begin snippet: js hide: false console: true babel: false -->

And this is my app.js

// eslint-disable-next-line import/no-extraneous-dependencies
import { PrismaClient } from '@prisma/client';
import express, { json } from 'express';
import helmet from 'helmet';

const prisma = new PrismaClient();

const app = express();
app.use(json());
app.use(helmet());

app.get('/', async (_, res) => {
  const data = await prisma.bookableTypes.findMany();
  res.json({
    msg: data,
  });
});

app.use((_, res, _2) => {
  res.status(404).json({ error: 'NOT FOUND' });
});

export { app };

This is my serverless.yml

org: andfp
app: testing
service: serverless-boilerplate
console: true

custom:
  # Our stage is based on what is passed in when running serverless
  # commands. Or falls back to what we have set in the provider section.
  stage: ${opt:stage, 'offline'}
  region: ${opt:region, 'us-east-1'}
  bundle:
    linting: false
    excludeFiles: "**/*.test.ts"
  serverless-offline:
    httpPort: 4000
    noPrependStageInUrl: true

provider:
  name: aws
  runtime: nodejs14.x
  memorySize: 512
  timeout: 10
  logRetentionInDays: 90
  logs:
    httpApi: true
  httpApi:
    # metrics: true # Enable if you need
    cors: true

functions:
  app:
    handler: src/handler.handler
    # reservedConcurrency: 100
    events:
      - httpApi:
          path: '/{proxy+}'
          method: '*'

package:
  individually: true

plugins:
  - serverless-dotenv-plugin
  - serverless-bundle
  - serverless-offline
  - serverless-webpack-prisma

It runs locally just fine, using serverless-offline. I can only assume prisma isn't being generated once deployed, but I can't seem to find how to make it do that - any tips?

Thanks!

0 Answers
Related