簡體   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