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

Read files in Phoenix in production mode

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

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

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

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

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

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

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

解决了它