在生产模式下读取 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")
解决了它
我有 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")