Elixir Mix 发布 - 如何将额外的文件复制到 Phoenix 应用程序的压缩包中?
Elixir Mix release - How can I copy extra files into the tarball of Phoenix app?
我写了下面的 mix.exs 以 tar 球的形式发布我的 Phoenix 应用程序,参考 Mix.Tasks.Release documentation 的“步骤”部分。
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。
注意:The same question 已在 Elixir 论坛上发布。
查看 mix.release
的 source,在编译发行版时似乎只有 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
您无需手动复制任何内容,因为 elixir 会自动为您完成此操作,如果您查看 my_app/lib/my_app-0.1.0/priv
,您的 priv 文件夹中的所有文件都在那里。
现在为了轻松访问这些资源而无需对路径进行硬编码,您可以使用 priv_dir
:
:code.priv_dir(:my_app)
这不仅适用于您的应用程序,例如,如果您想要 phoenix 静态资源,您可以在 phoenix priv 文件夹中找到它们。
我写了下面的 mix.exs 以 tar 球的形式发布我的 Phoenix 应用程序,参考 Mix.Tasks.Release documentation 的“步骤”部分。
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。
注意:The same question 已在 Elixir 论坛上发布。
查看 mix.release
的 source,在编译发行版时似乎只有 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
您无需手动复制任何内容,因为 elixir 会自动为您完成此操作,如果您查看 my_app/lib/my_app-0.1.0/priv
,您的 priv 文件夹中的所有文件都在那里。
现在为了轻松访问这些资源而无需对路径进行硬编码,您可以使用 priv_dir
:
:code.priv_dir(:my_app)
这不仅适用于您的应用程序,例如,如果您想要 phoenix 静态资源,您可以在 phoenix priv 文件夹中找到它们。