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