【问题标题】:Where does the `priv` directory belong in mix umbrella projects`priv` 目录在混合伞项目中属于哪里
【发布时间】:2017-04-03 21:27:18
【问题描述】:

据我了解,发布中所需的任何工件都应放在priv 目录中。对于伞式项目,伞级应该有一个 priv 目录还是每个应用程序都有一个?

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

【问题讨论】:

    标签: elixir release erlang-otp


    【解决方案1】:

    priv 目录是 OTP 应用程序布局的一部分。由于伞本身不是 OTP 应用程序,它没有 priv 目录 - 实际应用程序有,因此每个应用程序都有自己的 priv

    您可以使用以下命令访问 priv 目录中的文件:

    Application.app_dir(:app_name, "priv/path/to/file")
    

    【讨论】:

    • 有没有办法在不知道您所在应用程序名称的情况下查找应用程序目录。例如,宏可能想要查找它所包含的模块的应用程序目录
    • @otp_app Mix.Project.config[:app]
    【解决方案2】:

    如果您还没有定义: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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-15
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多