0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Prisma2で環境変数に応じてデータソースを切り替える

Last updated at Posted at 2019-12-23

12/23時点での内容です。Prisma2はアクティブに開発されているのでここの内容はすぐに古くなる可能性があります
2020/3/10: :warning: 現時点の最新版ではenabledオプションが削除されており下記の方法は使えません!issueが立てられておりhigh priorityとのことなのでそう遠くないうちに実装されるのではないでしょうか

Prisma2でデータソースを環境変数に応じて切り替える方法は公式ドキュメントにかかれている。

以下のようにschemaファイルを書くことで、ローカルで開発するときはsqliteで、productionはmysqlをデータソースとして使うようにすることができる。

prisma.schema
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する際も、環境変数を空でもいいので全て定義してあげる必要があるみたい。
以下のような形にするとうまく行く。

.envrc
export DEVELOPMENT_DB_URL="file:dev.db"
export PRODUCTION_DB_URL=

そもそもPhotonエンジンを生成するときに環境変数知ってる必要はないよねみたいな話はissueで議論されているが、
現状は空でもいいので指定する必要がある。
generate時にも必要なのはschemaファイルをパースするのに必要だからだそう。

実行時に必要な方だけ環境変数で与えてあげればデータソースを切り替えることができる。
このとき、使わないデータソースの方の環境変数は定義する必要はない。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?