在生产模式下读取Phoenix中的文件

时间:2017-04-14 15:00:04

标签: elixir phoenix-framework edeliver distillery

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

所以它在dev模式下工作正常,我可以读取此文件,如:File.stream!("priv/data/filters.csv"),但是一旦使用mix edeliver update传递应用,此文件就不再可访问了。

我可以在构建目录中看到此文件夹,但在应用程序发布后,没有这样的文件夹priv。我不确定为什么它没有复制到发送文件夹。

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

3 个答案:

答案 0 :(得分:5)

您应该使用:code.priv_dir/1在运行时获取应用程序的priv目录的绝对路径。这将适用于由例如Erlang创建的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

答案 1 :(得分:1)

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

解决了这个问题

答案 2 :(得分:0)

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