Elixir Mix发行版-如何将额外文件复制到凤凰卫视的tarball应用程序中?

Elixir Mix发行版-如何将额外文件复制到凤凰卫视的tarball应用程序中?,elixir,phoenix-framework,elixir-mix,Elixir,Phoenix Framework,Elixir Mix,我编写了以下mix.exs以将Phoenix应用程序作为tar ball发布,参考mix.Tasks.release的“步骤”部分 当我运行MIX_ENV=qa MIX release my_app时,它在_build/qa/rel/my_app下创建了一个种子目录,但当我提取生成的tar ball时,它不包含种子目录 如何重写mix.exs以将此目录插入tar球 Elixir版本是1.11.3 注意:已发布在Elixir论坛上。查看for mix.release,它似乎只在编译版本时从特定目录

我编写了以下mix.exs以将Phoenix应用程序作为tar ball发布,参考mix.Tasks.release的“步骤”部分

当我运行MIX_ENV=qa MIX release my_app时,它在_build/qa/rel/my_app下创建了一个种子目录,但当我提取生成的tar ball时,它不包含种子目录

如何重写mix.exs以将此目录插入tar球

Elixir版本是1.11.3

注意:已发布在Elixir论坛上。

查看for mix.release,它似乎只在编译版本时从特定目录中进行选择

如果将种子复制到{release.path}/releases/{release.version},它将被包括在内

defp copy\u extra\u files释放do File.cp\r 应用程序/共享/私有/回购/种子, {release.path}/releases/{release.version}/seeds 释放 终止
您不必手动复制任何内容,因为elixir会自动为您执行此操作,如果您查看my_app/lib/my_app-0.1.0/priv,您的priv文件夹中就有所有文件

现在,为了无需硬编码即可轻松访问这些资源,您可以使用以下路径:


这不仅适用于您的应用程序,例如,如果您需要phoenix静态资源,您可以在phoenix priv文件夹中找到它们。

非常感谢!一个音符。要在Elixir代码中使用它,我们需要编写类似List.To_string:code.priv_dir:shared的代码。从Daniel的回答中可以明显看出,这是错误的方法。但是它对于复制priv/目录之外的文件可能很有用,所以我暂时不使用它。
defmodule MyApp.MixProject do
  use Mix.Project

  def project do
    [
      apps_path: "apps",
      apps: [:shared, :admin, :shop],
      version: "0.1.0",
      start_permanent: Mix.env() in [:qa, :prod],
      deps: deps(),
      releases: [
        my_app: [
          applications: [
            admin: :permanent,
            shop: :permanent
          ],
          steps: [:assemble, &copy_extra_files/1, :tar]
        ]
      ],
      default_release: :my_app
    ]
  end

  defp copy_extra_files(release) do
    File.cp_r("apps/shared/priv/repo/seeds", release.path <> "/seeds")
    release
  end

  defp deps do
    []
  end
end
:code.priv_dir(:my_app)