12/23時点での内容です。Prisma2はアクティブに開発されているのでここの内容はすぐに古くなる可能性があります
2020/3/10: 現時点の最新版ではenabledオプションが削除されており下記の方法は使えません!issueが立てられておりhigh priorityとのことなのでそう遠くないうちに実装されるのではないでしょうか
Prisma2でデータソースを環境変数に応じて切り替える方法は公式ドキュメントにかかれている。
以下のようにschemaファイルを書くことで、ローカルで開発するときはsqliteで、productionはmysqlをデータソースとして使うようにすることができる。
datasource development {
provider = "sqlite"
url = env("DEVELOPMENT_DB_URL")
enabled = env("DEVELOPMENT_DB_URL")
}
datasource production {
provider = "mysql"
url = env("PRODUCTION_DB_URL")
enabled = env("PRODUCTION_DB_URL")
}
この状態でnpx prisma2 generate
をしてクエリエンジンを生成しようとすると環境変数が定義されていないと怒られる。
$ npx prisma2 generate
Error: Schema parsing
error: Environment variable not found: DEVELOPMENT_DB_URL.
--> schema.prisma:3
|
2 | provider = "sqlite"
3 | url = env("DEVELOPMENT_DB_URL")
|
error: Environment variable not found: PRODUCTION_DB_URL.
--> schema.prisma:9
|
8 | provider = "mysql"
9 | url = env("PRODUCTION_DB_URL")
現状だとprisma2 generateする際も、環境変数を空でもいいので全て定義してあげる必要があるみたい。
以下のような形にするとうまく行く。
export DEVELOPMENT_DB_URL="file:dev.db"
export PRODUCTION_DB_URL=
そもそもPhotonエンジンを生成するときに環境変数知ってる必要はないよねみたいな話はissueで議論されているが、
現状は空でもいいので指定する必要がある。
generate時にも必要なのはschemaファイルをパースするのに必要だからだそう。
実行時に必要な方だけ環境変数で与えてあげればデータソースを切り替えることができる。
このとき、使わないデータソースの方の環境変数は定義する必要はない。