Allow environment expressions inside the Prisma Schema
See original GitHub issueProblem
Today we support variable expressions within the .env
file:
USERNAME="postgres"
DATABASE_URL="postgres://${USERNAME}@localhost:5432/repro"
But we don’t currently support environment expression inside the Prisma Schema. This prevents us from separating configuration from the environment.
This lack of separation means you need to either hardcode values in the Prisma Schema or move more configuration into the environment.
Presently, environment expressions would mostly be a quality of life improvement and taking better advantage of our Prisma Schema as a configuration language.
In the future, I sense this will become more important as we need more configuration (e.g. prisma migrate
configuration, prisma introspect
configuration.)
Configuration vs. Environment
- Configuration are settings in your application that don’t change. You want this in source control.
- Environment are settings or secrets that change across the environment. You don’t want your secrets in source control.
You can find this separation in practice in popular frameworks:
- Rails example with
RAILS_MAX_THREADS
environment variable passed in. - Laravel example with a
MAIL_HOST
environment variable passed in.
Suggested solution
Extend our Prisma Schema syntax to support template expressions.
datasource pg {
provider = "postgres"
url = "${env("DATABASE_URL")}?sslidentity=/tmp/client-identity&sslcert=${env("SERVER_CA")}"
}
Alternatives
Extend our schema in some other way.
Related
- User feedback on suggested solution: https://github.com/prisma/prisma/issues/1673#issuecomment-682438993
- Current dotenv expand support: #3681
Issue Analytics
- State:
- Created 3 years ago
- Reactions:13
- Comments:7 (3 by maintainers)
Top GitHub Comments
@janpio this issue was created in response to: https://github.com/prisma/prisma/issues/1673#issuecomment-682438993
It would be useful to be able to connect to a DB via SSL in a serverless context.
Currently you need to jump through a lot of hoops to get SSL working on vercel.
This, together with the ability to pass sslcert etc. as a env var and not as a file, would make this much easier
I think the example from @matthewmueller above is just poorly chosen, this issue is not about being able to provide a certificate as a a string at all. Please open a new feature requests for this (or look for an existing one). Thanks.