P
Prisma3mo ago
Helix

Two Schemas but only one will stay generated at a time

Title is pretty explanatory. I have two schemas for different databases but I can run generate for one schema and then the other schema starts to have error lines in vscode, then generating the other schema swaps the errors to the first schema. Any way to fix this it’s pretty annoying.
10 Replies
Helix
HelixOP3mo ago
import { PrismaClient } from "@prisma/client";

import { env } from "@/env";
const createPrismaClient = (url: string) =>
new PrismaClient({
log:
env.NODE_ENV === "development"
? ["query", "error", "warn"]
: ["error"],
datasources: {
db: {
url: url,
},
},
});

const globalForPrisma = globalThis as unknown as {
prisma: ReturnType<typeof createPrismaClient> | undefined;
};

export const aero_db =
globalForPrisma.prisma ?? createPrismaClient(env.DATABASE_URL);
export const alec_site_db = createPrismaClient(env.ALEC_SITE_DB_URL);

if (env.NODE_ENV !== "production") globalForPrisma.prisma = aero_db;
import { PrismaClient } from "@prisma/client";

import { env } from "@/env";
const createPrismaClient = (url: string) =>
new PrismaClient({
log:
env.NODE_ENV === "development"
? ["query", "error", "warn"]
: ["error"],
datasources: {
db: {
url: url,
},
},
});

const globalForPrisma = globalThis as unknown as {
prisma: ReturnType<typeof createPrismaClient> | undefined;
};

export const aero_db =
globalForPrisma.prisma ?? createPrismaClient(env.DATABASE_URL);
export const alec_site_db = createPrismaClient(env.ALEC_SITE_DB_URL);

if (env.NODE_ENV !== "production") globalForPrisma.prisma = aero_db;
generator client {
provider = "prisma-client-js"
previewFeatures = ["driverAdapters", "prismaSchemaFolder", "multiSchema"]
}

datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
previewFeatures = ["driverAdapters", "prismaSchemaFolder", "multiSchema"]
}

datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
previewFeatures = ["driverAdapters", "prismaSchemaFolder", "multiSchema"]
output = "../node_modules/@internal/prisma-second/client"
}

datasource db {
provider = "mysql"
url = env("ALEC_SITE_DB_URL")
}
generator client {
provider = "prisma-client-js"
previewFeatures = ["driverAdapters", "prismaSchemaFolder", "multiSchema"]
output = "../node_modules/@internal/prisma-second/client"
}

datasource db {
provider = "mysql"
url = env("ALEC_SITE_DB_URL")
}
Nurul
Nurul3mo ago
Hello @Helix 👋 Can you try providing custom output path for both of your schemas and check if you still get the same error? Also, what error do you get? Can you also share your use case? Does having two generated Prisma Clients cause an issue? https://www.prisma.io/docs/orm/prisma-client/setup-and-configuration/generating-prisma-client#using-a-custom-output-path
Generating Prisma Client | Prisma Documentation
This page explains how to generate Prisma Client. It also provides additional context on the generated client, typical workflows and Node.js configuration.
Helix
HelixOP3mo ago
// schema1.prisma
generator client {
provider = "prisma-client-js"
previewFeatures = ["driverAdapters", "prismaSchemaFolder", "multiSchema"]
output = "../node_modules/@internal/prisma-first/client"
}

datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}

// schema2.prisma
generator client {
provider = "prisma-client-js"
previewFeatures = ["driverAdapters", "prismaSchemaFolder", "multiSchema"]
output = "../node_modules/@internal/prisma-second/client"
}

datasource db {
provider = "mysql"
url = env("ALEC_SITE_DB_URL")
}
// schema1.prisma
generator client {
provider = "prisma-client-js"
previewFeatures = ["driverAdapters", "prismaSchemaFolder", "multiSchema"]
output = "../node_modules/@internal/prisma-first/client"
}

datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}

// schema2.prisma
generator client {
provider = "prisma-client-js"
previewFeatures = ["driverAdapters", "prismaSchemaFolder", "multiSchema"]
output = "../node_modules/@internal/prisma-second/client"
}

datasource db {
provider = "mysql"
url = env("ALEC_SITE_DB_URL")
}
I have two different database schemas one called aero and one called alec_site that I'm trying to connect to, aero contains the user data & app specific data where alec_site contains other data that I need. I'm not getting any specific errors besides Property 'vendor_id_walmart' does not exist on type 'PrismaClient<{ datasources: { db: { url: string; }; }; }, never, DefaultArgs>'. for the alec_site db.
export const aero_db = new PrismaClient({
datasources: { db: { url: env.DATABASE_URL } },
});
export const alec_site_db = new PrismaClient({
datasources: { db: { url: env.ALEC_SITE_DB_URL } },
});
export const aero_db = new PrismaClient({
datasources: { db: { url: env.DATABASE_URL } },
});
export const alec_site_db = new PrismaClient({
datasources: { db: { url: env.ALEC_SITE_DB_URL } },
});
this is the prisma clients I figured it out!
Nurul
Nurul3mo ago
I am glad to hear that you figured out the solution. What was the fix which worked for you?
Helix
HelixOP3mo ago
I forgot to import the client from the outputs. I'm having a new issue though, whenever I try to deploy my site to heroku I am getting
2024-11-21T20:08:41.878893+00:00 app[web.1]: PrismaClientInitializationError:
2024-11-21T20:08:41.878904+00:00 app[web.1]: Invalid `prisma.user.findUnique()` invocation:
2024-11-21T20:08:41.878904+00:00 app[web.1]:
2024-11-21T20:08:41.878905+00:00 app[web.1]:
2024-11-21T20:08:41.878905+00:00 app[web.1]: Prisma Client could not locate the Query Engine for runtime "debian-openssl-3.0.x".
2024-11-21T20:08:41.878905+00:00 app[web.1]:
2024-11-21T20:08:41.878906+00:00 app[web.1]: We detected that you are using Next.js, learn how to fix this: https://pris.ly/d/engine-not-found-nextjs.
2024-11-21T20:08:41.878906+00:00 app[web.1]:
2024-11-21T20:08:41.878909+00:00 app[web.1]: This is likely caused by a bundler that has not copied "libquery_engine-debian-openssl-3.0.x.so.node" next to the resulting bundle.
2024-11-21T20:08:41.878909+00:00 app[web.1]: Ensure that "libquery_engine-debian-openssl-3.0.x.so.node" has been copied next to the bundle or in "node_modules/@internal/aero/client".
2024-11-21T20:08:41.878893+00:00 app[web.1]: PrismaClientInitializationError:
2024-11-21T20:08:41.878904+00:00 app[web.1]: Invalid `prisma.user.findUnique()` invocation:
2024-11-21T20:08:41.878904+00:00 app[web.1]:
2024-11-21T20:08:41.878905+00:00 app[web.1]:
2024-11-21T20:08:41.878905+00:00 app[web.1]: Prisma Client could not locate the Query Engine for runtime "debian-openssl-3.0.x".
2024-11-21T20:08:41.878905+00:00 app[web.1]:
2024-11-21T20:08:41.878906+00:00 app[web.1]: We detected that you are using Next.js, learn how to fix this: https://pris.ly/d/engine-not-found-nextjs.
2024-11-21T20:08:41.878906+00:00 app[web.1]:
2024-11-21T20:08:41.878909+00:00 app[web.1]: This is likely caused by a bundler that has not copied "libquery_engine-debian-openssl-3.0.x.so.node" next to the resulting bundle.
2024-11-21T20:08:41.878909+00:00 app[web.1]: Ensure that "libquery_engine-debian-openssl-3.0.x.so.node" has been copied next to the bundle or in "node_modules/@internal/aero/client".
this error now. I have tried the fix in the error logs but it fails to import the monorepo fix in the next.config.js Any ideas?
Nurul
Nurul3mo ago
So you tried this workaround: https://www.prisma.io/docs/orm/more/help-and-troubleshooting/help-articles/nextjs-prisma-client-monorepo but that too didn't work for you? What error do you get when trying to install the plugin?
Using Prisma Client in a Next.js project in a monorepo setup | Pris...
Using Prisma Client in a Next.js project in a monorepo setup
Helix
HelixOP3mo ago
It was failing to import in my next.config.js Almost like it wouldn’t install properly but it was installed and I could see it in my node_modules
Nurul
Nurul3mo ago
Is your repository open source? If yes, can you share the link?
Helix
HelixOP3mo ago
It is not, I can send you over a zip file of the project, or I can make it public temporarily. I can also send over any files you need.
Nurul
Nurul3mo ago
It would be helpful if you can make the repo public and share instructions on how to reproduce the error

Did you find this page helpful?