Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Read files in Phoenix in production mode

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?

like image 870
BitOfUniverse Avatar asked Apr 14 '17 15:04

BitOfUniverse


2 Answers

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.

like image 125
Dogbert Avatar answered Sep 28 '22 09:09

Dogbert


I had a similar issue and managed to resolve it using Application.app_dir(my_app, "priv")

like image 37
RobStallion Avatar answered Sep 28 '22 08:09

RobStallion