在应用程序中获取 elixir mix 发布版本

Get elixir mix release version in application

我有以下mix.exs

defmodule App.MixProject do
  use Mix.Project

  @version "0.1.0"
  def git_ref(), do: System.get_git_hash()

  def project do
    [
      app: :app,
      version: @version,
      ...
      releases: [
        app: fn ->
          [version: @version <> "+" <> git_ref()]
        end
      ]
    ]
  end
end

我想在我的应用程序中输出 release 版本。我看过这个问题, 但所有答案 return“0.1.0”,即“project.version”

如果我 运行 我的版本 _build/../app version,它 return 是正确的值,所以它能够获得 git 散列并设置键值, 但是该值被写到 version 命令的文件中。

我只是不知道如何在“运行时间”获得它。这可能吗?我以为版本可能会覆盖以前的键值,但我猜它们是不同的?

据我所知,发布版本不包含在 beam 文件中,它是由发布脚本处理的纯元数据。我不相信有一种内置的方法来查找发行版本。但是,脚本exports the version to RELEASE_VSN,所以你可以使用它。

System.get_env("RELEASE_VSN")

这记录在 mix release 文档的 Environment variables 部分:

  • RELEASE_VSN - the version of the release, otherwise the latest version is used. It can be set to a custom value when invoking the release. The custom value must be an existing release version in the releases/ directory