在生产模式下以Phoenix读取文件

Bit*_*rse 1 elixir phoenix-framework edeliver distillery

我有Phoenix应用程序(我使用--api标志创建了它),其中包含一些处理我存储在中的请求所需的其他数据priv/data/filters.csv

因此,它在dev模式下可以正常工作,我可以像这样读取该文件:File.stream!("priv/data/filters.csv"),但是使用mix edeliver update该文件交付应用后,将无法再访问它。

我可以在构建目录中看到该文件夹​​,但是在交付应用程序之后,没有该文件夹priv。我不确定为什么不将其复制到传递文件夹中。

我做错了什么?交付过程后是否需要复制这些文件?在哪里可以存储必须以生产方式使用的文件?

Dog*_*ert 5

您应该使用:code.priv_dir/1priv在运行时获取应用程序目录的绝对路径。这将与例如Distillery创建的Erlang版本一起使用:

File.stream!(Path.join(:code.priv_dir(:my_app), "data/filters.csv"))
Run Code Online (Sandbox Code Playgroud)

对我来说,完成后将MIX_ENV=prod mix release文件priv/foo复制到_build/prod/lib/my_app/priv/foo