简体   繁体   中英

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?

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 eg 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 .

我遇到了类似的问题,并设法使用Application.app_dir(my_app, "priv")解决了该问题

You should check your configuration in the lib/YOUR_APP/endpoint.ex . By default Plug.Static white lists the files that are served. Try adding your files at the only: ~w(...) list.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM