簡體   English   中英

無法將 Elixir Phoenix 作為混合版本啟動

[英]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 的新版本中有一個新功能,稱為運行時配置,它更受青睞,而不是編譯時的配置,您可以在此處閱讀有關它們的更多信息。

此功能背后的基本思想是,您可以在服務器運行時獲取環境變量,與舊配置相比,您必須在構建時提供所有配置,這在使用容器時非常方便,而且通常更靈活.

進行運行時配置的步驟如下:

  1. config文件夾中創建releases.exs文件;
  2. 復制您在prod.exs中提供的所有配置,或者至少復制您想要覆蓋的部分;
  3. 使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM