`priv`目录在哪里属于混合伞项目

时间:2016-11-20 12:28:38

标签: elixir release otp

据我了解,版本中需要的任何工件都应放在priv目录中。在伞形项目的情况下,伞形层面应该有一个私有目录,还是每个应用程序都有一个?

另外,如何查找priv目录的路径名?

2 个答案:

答案 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