【发布时间】:2017-04-03 21:27:18
【问题描述】:
据我了解,发布中所需的任何工件都应放在priv 目录中。对于伞式项目,伞级应该有一个 priv 目录还是每个应用程序都有一个?
另外,您如何查找 priv 目录的路径名?
【问题讨论】:
标签: elixir release erlang-otp
据我了解,发布中所需的任何工件都应放在priv 目录中。对于伞式项目,伞级应该有一个 priv 目录还是每个应用程序都有一个?
另外,您如何查找 priv 目录的路径名?
【问题讨论】:
标签: elixir release erlang-otp
priv 目录是 OTP 应用程序布局的一部分。由于伞本身不是 OTP 应用程序,它没有 priv 目录 - 实际应用程序有,因此每个应用程序都有自己的 priv。
您可以使用以下命令访问 priv 目录中的文件:
Application.app_dir(:app_name, "priv/path/to/file")
【讨论】:
@otp_app Mix.Project.config[:app]
如果您还没有定义:app_name,就像我的情况一样,我已经成功地完成了这项工作:
defmodule MyModule do
@otp_app Mix.Project.config[:app]
def my_func do
Application.app_dir(@otp_app, "priv/path/to/file")
end
end
然后我可以在我的总括项目的根级别和使用priv 目录的应用程序中运行我的测试 (mix test)。
更新:
我遇到了问题,因为我有一个 escript,我想使用来自 priv 的数据,所以我最终在编译时读取了该文件,然后我的问题就消失了:
@otp_app Mix.Project.config()[:app]
@file_contents File.stream!(Application.app_dir(@otp_app, "priv/path/tofile"))
在我的方法中:
def read_file do
@file_contents
|> do_something
# ...
end
【讨论】: