Elixir Mix 版本 - 如何将额外的文件复制到 Phoenix 应用程序的 tarball 中?

Tsu*_*omu 4 elixir-mix elixir phoenix-framework

我编写了以下 mix.ex 以将我的 Phoenix 应用程序作为 tar 球发布,请参阅 Mix.Tasks.Release 文档的 \xe2\x80\x9cSteps\xe2\x80\x9d部分

\n
defmodule MyApp.MixProject do\n  use Mix.Project\n\n  def project do\n    [\n      apps_path: "apps",\n      apps: [:shared, :admin, :shop],\n      version: "0.1.0",\n      start_permanent: Mix.env() in [:qa, :prod],\n      deps: deps(),\n      releases: [\n        my_app: [\n          applications: [\n            admin: :permanent,\n            shop: :permanent\n          ],\n          steps: [:assemble, &copy_extra_files/1, :tar]\n        ]\n      ],\n      default_release: :my_app\n    ]\n  end\n\n  defp copy_extra_files(release) do\n    File.cp_r("apps/shared/priv/repo/seeds", release.path <> "/seeds")\n    release\n  end\n\n  defp deps do\n    []\n  end\nend\n
Run Code Online (Sandbox Code Playgroud)\n

当我运行 时MIX_ENV=qa mix release my_app,它seeds在 下创建了一个目录_build/qa/rel/my_app,但是当我提取生成的 tar 球时,它不包含该seeds目录。

\n

我如何重写才能mix.exs将此目录插入到 tar 球中?

\n

Elixir 版本是 1.11.3。

\n

注:同样的问题已发布在 Elixir 论坛上。

\n

Dan*_*iel 5

您不必手动复制任何内容,因为 elixir 会自动为您完成此操作,如果您查看my_app/lib/my_app-0.1.0/priv您的 priv 文件夹中的所有文件。

现在,为了轻松访问这些资源而无需对路径进行硬编码,您可以使用priv_dir\1

:code.priv_dir(:my_app)
Run Code Online (Sandbox Code Playgroud)

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