I've Phoenix app (I created it with --api flag) that has some additional data required to process requests that I store in priv/data/filters.csv
.
So it works fine in dev
mode, I can read this file like: File.stream!("priv/data/filters.csv")
, but once app is delivered using mix edeliver update
this file is not accessible anymore.
I can see this folder in build directory, but after app is delivered there is no such folder priv
. I'm not sure why it's not copied to deliver folder.
What I'm doing wrong? Do I need to copy these files after deliver process? Where can I store my files that I have to use in prod mode?
You should use :code.priv_dir/1
to get the absolute path to the priv
directory of your application at runtime. This will work with Erlang releases created by e.g. Distillery:
File.stream!(Path.join(:code.priv_dir(:my_app), "data/filters.csv"))
For me, after doing MIX_ENV=prod mix release
, the file priv/foo
is copied to _build/prod/lib/my_app/priv/foo
.
I had a similar issue and managed to resolve it using Application.app_dir(my_app, "priv")
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With