2021年2月10日水曜日

electronでprisma使うときに気をつけておきましょう的なお話

  • このエントリーをはてなブックマークに追加

create-react-app + electron + ffmpeg static + prismaで以前作った動画エンコードアプリを作り直しているんだけど、二つ大きな問題が出てきた。
1つはQuery engine binary for current platform "darwin"で、npx prisma generateしたときにnode_modules/.prisma/clientに入ってるはずのquery-engine-darwinが見つからないよっていう問題。
もう1つは上記問題を解決したあと本番パッケージングをして出てきたError: ENOTDIR: not a directory, chmod 'path/to/app/Contents/Resources/app.asar/build/query-engine-darwin'っていうエラー。

ということで今日はそれらの問題が出てくる理由と解決方法をば。 cp file asarをしない

■Query engine binary for current platform "darwin"問題

これは開発環境でも起きたものでもあるし、本番パッケージングでも起きた問題。
query-engine-darwinが見つからないから実行できないよっていう話。
なのでもしelectronを使っていてこういう問題が出たらパスにもよるんだけども、cp prisma/schema.prisma build/schema.prisma && cp node_modules/.prisma/client/query-engine-darwin build/query-engine-darwinとビルドする際にやっておきましょう的な。

自分はbuildディレクトリに諸々が入るようにしているので、これらの中にschemaとengineを入れることで無事に解決できた。

■Error: ENOTDIR: not a directory, chmod 'path/to/app/Contents/Resources/app.asar/build/query-engine-darwin'問題

これは上記の問題を解決したあと、本番パッケージングで起きた問題。
query-engine-darwinを実行しようにも実行許可がないからできないよっていう感じ。
というのもelectronでパッケージングをするとasarでパッケージングを行う。
これの中身は読み取り権限しかなく実行権限がないのでこういう問題がおきる。

なのでelectron-builderの設定でasarをfalseにすることで解決出来た。
一応自分の環境ではasarにしなくても問題はなかったのでよかったなと。

ちなみに調べていくとhttps://github.com/prisma/prisma/discussions/5200に当たって、この中でnew PrismaClientするときにengineのバイナリパスを設定できるってことだけど公式ドキュメントにも方法書いてないし、node_modules/.prisma/clientの中身を見ても指定できるようなコードもなかったという。
これができると楽なんだけどなぁという。

ってな感じでやってあげれば無事にelectron上でもprismaを動かすことができる的なみたいな。
まぁ本来はprismaでAPIサーバを立ててあげて、それをelectron上から叩くとかが正解なんだろうけど、APIサーバ立てて公開するようなものでもないからいいや的なみたいな。

0 件のコメント:

コメントを投稿

Adsense