[英]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, ©_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.