Open mjlangan opened 6 months ago
You are probably on an arm Mac, right? I can reproduce, I'll have to look closer into it
You are probably on an arm Mac, right? I can reproduce, I'll have to look closer into it
Intel Mac, actually. Though I have teammates with ARM machines.
I forgot to add a step after re-generating the client within the Dockerfile where I move the package to another location (the schema file comes from a git submodule) I added the generated Prisma files to my .dockerignore
and included the step to copy them into the right place, and now I get a different error (progress!)
{"level":"fatal","msg":"error connecting to database: ensure: version check failed: fork/exec /tmp/prisma/binaries/engines/473ed3124229e22d881cb7addf559799debae1ab/unpacked/v2/prisma-query-engine-debian-openssl-3.0.x: no such file or directory","time":"2024-05-03T07:37:54Z"}
I think I recall something about a/tmp
folder in another issue, I'll keep poking at this on my end too.
For reference, the "generate" portion of my dockerfile now looks like:
ENV PRISMA_GENERATOR_CLIENT go run github.com/steebchen/prisma-client-go
RUN go run github.com/steebchen/prisma-client-go generate
RUN cp ./prisma/db/* ./database/db
RUN rm -rf ./prisma/db
Inspecting the filesystem within the build
stage shows I got something generated under /tmp/prisma-binaries
, but this path does not match what my application says it's looking for, either.
ls -al
total 16
drwxrwxrwt 1 root root 4096 May 3 07:37 .
drwxr-xr-x 1 root root 4096 May 3 18:29 ..
drwxr-xr-x 1 root root 4096 May 3 00:36 prisma-binaries
cd prisma-binaries
ls -al
total 47052
drwxr-xr-x 1 root root 4096 May 3 00:36 .
drwxrwxrwt 1 root root 4096 May 3 07:37 ..
-rwxr-xr-x 1 root root 22857424 May 3 07:29 prisma-query-engine-linux-static-x64
-rwxr-xr-x 1 root root 25307344 May 3 07:29 prisma-schema-engine-linux-static-x64
Interesting, as on my M1 mac it actually uses the arm64 binary and there's a different error. Thanks for the report though, I'll have to look closer into it when I have some time. For now as a temporary workaround please use a single-stage build then it will work fine
Any updates on this issue?
I experiencing the same thing i guess with multi-stage.
Got error on start:
ensure: version check failed: fork/exec /tmp/prisma/binaries/engines/69d742ee20b815d88e17e54db4a2a7a3b30324e3/unpacked/v2/prisma-query-engine-debian-openssl-3.0.x: no such file or directory
Single stage working, but size of it is huge, 1.7gb, which kind of unacceptable for me.
yeah it is definitely still an issue, let me look into this this weekend
I was able to fix it. And I created a gist for the fix here.
https://gist.github.com/Sarps/ebba88ea89306032a7024b68eda07405
Yeah this is an ok temp solution, thanks! but I will have to fix the core issue
I'm having the same problem deploying to AWS Lambda (binary runtime).
What did worked for me as a workaround is setting the missing PRISMA_INTERNAL_QUERY_ENGINE_PATH
env variable with the path of the unpacked binary that I got printing the env variable value on the first run of the lambda. It seans that it keeps the content of /tmp
but resets the env vars for subsequents requests.
Maybe a check here, could fix it (at least for my case where the file exists but its path is unknown to the engine):
So it sets the variable before returning...
I also had to do a little trick to get the values of my .env
to be loaded before the client loads, by creating a package with a init
function that gets imported in my main.go
(before anything that imports the prisma client) as 'no-op'. I called github.com/joho/godotenv.Load()
, but I guess just importing github.com/joho/godotenv/autoload
as 'no-op' in the main instead of creating this package would work too. I'm not experienced with Go, but I noticed that the autogenerated client doesn't import it with autoload
:
Could it be the cause of https://github.com/steebchen/prisma-client-go/issues/1245 ? I also had the warning about DATABASE_URL
, and I don't get it now.
Oh that is super interesting @Alynva, thank you so much for bringing that up. This is actually a bug in the Go client. I think there might be a better solution to this, but for now I have added the fix you suggested to set the env var again (https://github.com/steebchen/prisma-client-go/pull/1409). Thanks so much for this detailed report and help, this is incredibly valuable!
Regarding the env, I thought about it a lot but mostly I came to the conclusion that I don't want to run any env stuff on behalf of the user; ideally they should set the database url with flags (although there is a known bug with that which I haven't figured out yet :/)...
I'm trying to package my application into a Docker image following the guide here: https://goprisma.org/docs/reference/deploy/docker#optimized-dockerfile
The image builds fine, but when I run I get (pardon the JSON-formatted log output):
I did check for other issues and know this isn't the first issue about this error, but in my case:
Connect()
during anyinit()
functionsDockerfile looks like this:
.dockerignore is filtering out stuff like IDE files, the .git folder, locally-built app binaries on the dev's machine, etc., but I'm also running the generator again so that should be getting whatever binary I need for Linux, right?