繁体   English   中英

Elixir 混合版本 - 如何将额外文件复制到 Phoenix 应用程序的压缩包中?

[英]Elixir Mix release - How can I copy extra files into the tarball of Phoenix app?

我编写了以下 mix.exs 以将我的 Phoenix 应用程序作为 tar 球发布,参考 Mix.Tasks.Release文档的“步骤”部分。

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

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

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

Elixir 版本为 1.11.3。

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

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

现在,为了在不硬编码路径的情况下轻松访问这些资源,您可以使用priv_dir\1

:code.priv_dir(:my_app)

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

查看mix.release源代码,编译版本时似乎只有特定目录中的 select 。

如果您将seeds复制到#{release.path}/releases/#{release.version} ,它将被包含在内。

defp copy_extra_files(release) do
  File.cp_r(
    "apps/shared/priv/repo/seeds",
    "#{release.path}/releases/#{release.version}/seeds"
  )

  release
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM