![](/img/trans.png)
[英]Elixir Mix release - How can I copy extra files into the tarball of Phoenix app?
[英]Can't start a Elixir Phoenix as a mix release
我无法从mix release
开始我的项目。 但是如果我运行mix phx.server
它工作正常
我可以通过执行以下操作从空项目中重新创建此问题:
mix phx.new asdf --umbrella --no-ecto --no-html --no-webpack
然后编辑mix.exs
并添加一个发布部分:
def project do
[
apps_path: "apps",
start_permanent: Mix.env() == :prod,
deps: deps(),
version: "0.1.0",
releases: [
mega_umbrella: [
applications: [
mega: :permanent,
mega_web: :permanent
]
]
]
]
end
然后从config/prod.exs
中删除最后一行
# import_config "prod.secret.exs
运行mix release
运行_build/dev/rel/asdf_umbrella/bin/asdf_umbrella start
应用程序就挂在那里。
我做错了什么,为什么它就挂在那里?
我的版本信息:
elixir --version
Erlang/OTP 22 [erts-10.5.3] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe] [dtrace]
Elixir 1.9.2 (compiled with Erlang/OTP 22)
首先,当谈到配置时,在 distillery 的新版本中有一个新功能,称为运行时配置,它更受青睐,而不是编译时的配置,您可以在此处阅读有关它们的更多信息。
此功能背后的基本思想是,您可以在服务器运行时获取环境变量,与旧配置相比,您必须在构建时提供所有配置,这在使用容器时非常方便,而且通常更灵活.
进行运行时配置的步骤如下:
config
文件夹中创建releases.exs
文件;prod.exs
中提供的所有配置,或者至少复制您想要覆盖的部分;System.fetch_env!\1
从环境变量中获取数据; 您应该记住,运行时配置会覆盖以前的配置,因此,例如,如果您在编译时提供prod.exs
配置, releases.exs
中的所有新配置都将覆盖旧配置。
此类配置的一部分的示例是:
config :tachocard_api, TachocardApi.Repo,
username: System.fetch_env!("PGUSER"),
password: System.fetch_env!("PGPASSWORD"),
database: System.fetch_env!("PGDATABASE"),
hostname: System.fetch_env!("PGHOST"),
pool_size: 10
然后在您的部署环境中将这些环境变量设置为您需要的值。 推荐使用System.fetch_env!/1
bang 版本,因为如果没有设置环境变量会抛出错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.