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!