6

我有 Phoenix 应用程序(我使用 --api 标志创建它),它有一些额外的数据来处理我存储在priv/data/filters.csv.

所以它在dev模式下工作正常,我可以像这样读取这个文件:File.stream!("priv/data/filters.csv")但是一旦使用mix edeliver update这个文件交付应用程序就无法再访问了。

我可以在 build 目录中看到这个文件夹,但是应用交付后没有这个文件夹priv。我不确定为什么它没有被复制到传递文件夹。

我做错了什么?我需要在交付过程后复制这些文件吗?在哪里可以存储我必须在 prod 模式下使用的文件?

4

3 回答 3

14

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

File.stream!(Path.join(:code.priv_dir(:my_app), "data/filters.csv"))

对我来说,在做之后MIX_ENV=prod mix release,文件priv/foo被复制到_build/prod/lib/my_app/priv/foo.

于 2017-04-16T16:21:40.550 回答
1

我有一个类似的问题,并设法使用Application.app_dir(my_app, "priv")

于 2017-07-05T21:41:56.210 回答
0

你应该检查你的配置在lib/YOUR_APP/endpoint.ex. 默认情况下Plug.Static,将提供的文件列入白名单。尝试在only: ~w(...)列表中添加您的文件。

于 2017-04-16T19:48:24.073 回答