2017-04-14 55 views
0

我已经使用了Phoenix应用程序(我用--api标志创建了它),它有一些额外的数据来处理我在priv/data/filters.csv中存储的请求。在生产模式下阅读Phoenix中的文件

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

我可以在构建目录中看到这个文件夹,但在应用程序交付后没有这样的文件夹priv。我不知道为什么它没有被复制到提供文件夹。

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

+0

什么是'相对/ config.exs'的内容? – mudasobwa

+2

尝试'File.stream!(Path.join(:code.priv_dir(:my_app),“data/filters.csv”))'。 – Dogbert

+0

测试此方法的一个快速方法是将remote_console打开到生产实例。然后你可以在iex中键入'pwd'来查看你的相对路径的起始位置。然后尝试调用':code.priv_dir(:my_app)'和绝对路径。 –

回答

3

您应该使用: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

+0

上帝保佑你,它的工作!现在我知道它是如何工作的。 – BitOfUniverse

0

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

+0

是的,但我没有看到通常的静态文件。这是因为我误解了文件结构,所以我不得不在'deilver_path/lib/app_version /'文件夹中'priv'文件夹,而不是'deliver_path'本身。 – BitOfUniverse

0

我也有类似的问题,并设法解决它使用Application.app_dir(my_app, "priv")