据我了解,版本中需要的任何工件都应放在priv
目录中。在伞形项目的情况下,伞形层面应该有一个私有目录,还是每个应用程序都有一个?
另外,如何查找priv目录的路径名?
答案 0 :(得分:3)
priv
目录是OTP应用程序布局的一部分。由于保护伞本身不是OTP应用程序,因此它没有priv
目录 - 实际应用程序会这样做,因此每个应用程序都有自己的priv
。
您可以使用以下方式访问priv目录中的文件:
Application.app_dir(:app_name, "priv/path/to/file")
答案 1 :(得分:0)
如果像我这样还没有定义: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
然后,我可以在伞项目的根级别和使用mix test
目录的应用中运行测试(priv
)。
更新:
我遇到了问题,因为我有一个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