Skip to content

Commit 0a9b6b5

Browse files
committed
Fix deployment issues: timeout command compatibility and Prisma client generation
- Replace macOS-incompatible 'timeout' command with cross-platform bash function in deploy.sh - Update Prisma schema to use custom output path (../src/generated/client) for v7 compatibility - Update db imports to use new custom Prisma client location - Update buildspec.yml to properly copy custom Prisma client to Docker image - Regenerate Prisma client in new location This fixes the deployment hanging issue on macOS and ensures Prisma client is available in production Docker containers.
1 parent 99e6d96 commit 0a9b6b5

31 files changed

+11458
-4
lines changed

apps/web/buildspec.yml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,12 @@ phases:
5050
- ls -la .next/standalone/public/ || echo "❌ .next/standalone/public/ not found"
5151
- ls -la .next/standalone/server.js || echo "❌ server.js not found"
5252

53+
- echo "=== COPYING PRISMA CLIENT FOR RUNTIME ==="
54+
- echo "Copying generated Prisma client to standalone build..."
55+
- mkdir -p .next/standalone/src/generated
56+
- cp -r src/generated/client .next/standalone/src/generated/ || echo "Warning: Custom Prisma client not found"
57+
- echo "✅ Prisma client copied to standalone build"
58+
5359
- echo "=== BUILDING DOCKER IMAGE WITH BUILD ARTIFACTS ==="
5460
# Note: We're using a simplified runtime Dockerfile here because the build artifacts
5561
# are already created. For local development or standard CI/CD, use the main Dockerfile
@@ -66,7 +72,7 @@ phases:
6672
ENV PORT=3000
6773
ENV HOSTNAME="0.0.0.0"
6874
69-
# Copy the complete standalone build
75+
# Copy the complete standalone build (includes Prisma client)
7076
COPY .next/standalone ./
7177
7278
# Create non-root user for security

apps/web/prisma/schema.prisma

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
generator client {
55
provider = "prisma-client-js"
6+
output = "../src/generated/client"
67
previewFeatures = ["queryCompiler", "driverAdapters"]
78
}
89

apps/web/src/db/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { PrismaClient } from "@prisma/client";
21
import { PrismaPg } from "@prisma/adapter-pg";
32
import { env } from "../env";
3+
import { PrismaClient } from "../generated/client";
44

55
// Create the adapter with connection string
66
const adapter = new PrismaPg({
@@ -23,4 +23,4 @@ export const prisma =
2323
if (env.NODE_ENV !== "production") globalForPrisma.prisma = prisma;
2424

2525
// Export the types from Prisma client
26-
export * from "@prisma/client";
26+
export * from "../generated/client";
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from "./index"
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
2+
/* !!! This is code generated by Prisma. Do not edit directly. !!!
3+
/* eslint-disable */
4+
module.exports = { ...require('.') }
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from "./index"
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
2+
/* !!! This is code generated by Prisma. Do not edit directly. !!!
3+
/* eslint-disable */
4+
module.exports = { ...require('#main-entry-point') }
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from "./default"
Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
2+
/* !!! This is code generated by Prisma. Do not edit directly. !!!
3+
/* eslint-disable */
4+
5+
Object.defineProperty(exports, "__esModule", { value: true });
6+
7+
const {
8+
PrismaClientKnownRequestError,
9+
PrismaClientUnknownRequestError,
10+
PrismaClientRustPanicError,
11+
PrismaClientInitializationError,
12+
PrismaClientValidationError,
13+
getPrismaClient,
14+
sqltag,
15+
empty,
16+
join,
17+
raw,
18+
skip,
19+
Decimal,
20+
Debug,
21+
objectEnumValues,
22+
makeStrictEnum,
23+
Extensions,
24+
warnOnce,
25+
defineDmmfProperty,
26+
Public,
27+
getRuntime,
28+
createParam,
29+
} = require('./runtime/edge.js')
30+
31+
32+
const Prisma = {}
33+
34+
exports.Prisma = Prisma
35+
exports.$Enums = {}
36+
37+
/**
38+
* Prisma Client JS version: 6.12.0
39+
* Query Engine version: 8047c96bbd92db98a2abc7c9323ce77c02c89dbc
40+
*/
41+
Prisma.prismaVersion = {
42+
client: "6.12.0",
43+
engine: "8047c96bbd92db98a2abc7c9323ce77c02c89dbc"
44+
}
45+
46+
Prisma.PrismaClientKnownRequestError = PrismaClientKnownRequestError;
47+
Prisma.PrismaClientUnknownRequestError = PrismaClientUnknownRequestError
48+
Prisma.PrismaClientRustPanicError = PrismaClientRustPanicError
49+
Prisma.PrismaClientInitializationError = PrismaClientInitializationError
50+
Prisma.PrismaClientValidationError = PrismaClientValidationError
51+
Prisma.Decimal = Decimal
52+
53+
/**
54+
* Re-export of sql-template-tag
55+
*/
56+
Prisma.sql = sqltag
57+
Prisma.empty = empty
58+
Prisma.join = join
59+
Prisma.raw = raw
60+
Prisma.validator = Public.validator
61+
62+
/**
63+
* Extensions
64+
*/
65+
Prisma.getExtensionContext = Extensions.getExtensionContext
66+
Prisma.defineExtension = Extensions.defineExtension
67+
68+
/**
69+
* Shorthand utilities for JSON filtering
70+
*/
71+
Prisma.DbNull = objectEnumValues.instances.DbNull
72+
Prisma.JsonNull = objectEnumValues.instances.JsonNull
73+
Prisma.AnyNull = objectEnumValues.instances.AnyNull
74+
75+
Prisma.NullTypes = {
76+
DbNull: objectEnumValues.classes.DbNull,
77+
JsonNull: objectEnumValues.classes.JsonNull,
78+
AnyNull: objectEnumValues.classes.AnyNull
79+
}
80+
81+
82+
83+
84+
85+
/**
86+
* Enums
87+
*/
88+
exports.Prisma.TransactionIsolationLevel = makeStrictEnum({
89+
ReadUncommitted: 'ReadUncommitted',
90+
ReadCommitted: 'ReadCommitted',
91+
RepeatableRead: 'RepeatableRead',
92+
Serializable: 'Serializable'
93+
});
94+
95+
exports.Prisma.TodoScalarFieldEnum = {
96+
id: 'id',
97+
title: 'title',
98+
completed: 'completed',
99+
createdAt: 'createdAt',
100+
updatedAt: 'updatedAt'
101+
};
102+
103+
exports.Prisma.SortOrder = {
104+
asc: 'asc',
105+
desc: 'desc'
106+
};
107+
108+
exports.Prisma.QueryMode = {
109+
default: 'default',
110+
insensitive: 'insensitive'
111+
};
112+
113+
114+
exports.Prisma.ModelName = {
115+
Todo: 'Todo'
116+
};
117+
/**
118+
* Create the Client
119+
*/
120+
const config = {
121+
"generator": {
122+
"name": "client",
123+
"provider": {
124+
"fromEnvVar": null,
125+
"value": "prisma-client-js"
126+
},
127+
"output": {
128+
"value": "/Users/claudfuen/Documents/Repos/infra-pathfinder/apps/web/src/generated/client",
129+
"fromEnvVar": null
130+
},
131+
"config": {
132+
"engineType": "client"
133+
},
134+
"binaryTargets": [
135+
{
136+
"fromEnvVar": null,
137+
"value": "darwin-arm64",
138+
"native": true
139+
}
140+
],
141+
"previewFeatures": [
142+
"driverAdapters",
143+
"queryCompiler"
144+
],
145+
"sourceFilePath": "/Users/claudfuen/Documents/Repos/infra-pathfinder/apps/web/prisma/schema.prisma",
146+
"isCustomOutput": true
147+
},
148+
"relativeEnvPaths": {
149+
"rootEnvPath": null
150+
},
151+
"relativePath": "../../../prisma",
152+
"clientVersion": "6.12.0",
153+
"engineVersion": "8047c96bbd92db98a2abc7c9323ce77c02c89dbc",
154+
"datasourceNames": [
155+
"db"
156+
],
157+
"activeProvider": "postgresql",
158+
"postinstall": false,
159+
"inlineDatasources": {
160+
"db": {
161+
"url": {
162+
"fromEnvVar": "DATABASE_URL",
163+
"value": null
164+
}
165+
}
166+
},
167+
"inlineSchema": "// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\ngenerator client {\n provider = \"prisma-client-js\"\n output = \"../src/generated/client\"\n previewFeatures = [\"queryCompiler\", \"driverAdapters\"]\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\nmodel Todo {\n id String @id @default(cuid())\n title String\n completed Boolean @default(false)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@map(\"todos\")\n}\n",
168+
"inlineSchemaHash": "0eb7dbd7fb608edd163166d4bc3774971cf026d1da7bb348757562d7aed84fb6",
169+
"copyEngine": true
170+
}
171+
config.dirname = '/'
172+
173+
config.runtimeDataModel = JSON.parse("{\"models\":{\"Todo\":{\"dbName\":\"todos\",\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"title\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"completed\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false}},\"enums\":{},\"types\":{}}")
174+
defineDmmfProperty(exports.Prisma, config.runtimeDataModel)
175+
config.engineWasm = undefined
176+
config.compilerWasm = undefined
177+
178+
config.injectableEdgeEnv = () => ({
179+
parsed: {
180+
DATABASE_URL: typeof globalThis !== 'undefined' && globalThis['DATABASE_URL'] || typeof process !== 'undefined' && process.env && process.env.DATABASE_URL || undefined
181+
}
182+
})
183+
184+
if (typeof globalThis !== 'undefined' && globalThis['DEBUG'] || typeof process !== 'undefined' && process.env && process.env.DEBUG || undefined) {
185+
Debug.enable(typeof globalThis !== 'undefined' && globalThis['DEBUG'] || typeof process !== 'undefined' && process.env && process.env.DEBUG || undefined)
186+
}
187+
188+
const PrismaClient = getPrismaClient(config)
189+
exports.PrismaClient = PrismaClient
190+
Object.assign(exports, Prisma)
191+

0 commit comments

Comments
 (0)