簡體   English   中英

缺少Elixir Appup文件時混合發布失敗

[英]mix release fails on missing elixir appup file

我有一個用elixir / phoenix編寫的簡單網站。 我今天做了一些更改,並希望將其部署到生產中。

我推送了我的倉庫,將其拉到生產服務器上,並發布了一個發布版本:

MIX_ENV=prod mix release

它失敗了...所以我再次用--verbosity=verbose運行了它,但失敗了:

silent])===> Provider (relup) failed with: {error,
   {rlx_prv_relup,
   {relup_script_generation_error,
   systools_relup,
   {file_problem,
   {"/home/herman/alive/rel/alive/lib/elixir-1.1.1/ebin/elixir.appup",
     {error,
       {open,
        "/home/herman/alive/rel/alive/lib/elixir-1.1.1/ebin/elixir.appup",
    enoent}}}}}}}

有人知道如何解決嗎?

當前版本0.0.6在elixir 1.1.0下運行,新版本0.0.7在1.1.1下運行。

我的mix.exs:

defmodule Alive.Mixfile do
  use Mix.Project

  def project do
    [app: :alive,
     version: "0.0.7",
     elixir: "~> 1.0",
     elixirc_paths: elixirc_paths(Mix.env),
     compilers: [:phoenix] ++ Mix.compilers,
     build_embedded: Mix.env == :prod,
     start_permanent: Mix.env == :prod,
     deps: deps]
  end

  # Configuration for the OTP application
  #
  # Type `mix help compile.app` for more information
  def application do
    [mod: {Alive, []},
   applications: [
     :phoenix,
     :phoenix_html,
     :cowboy,
     :logger,
     :phoenix_ecto,
     :timex,
     :mariaex]
   ]
  end

  # Specifies which paths to compile per environment
  defp elixirc_paths(:test), do: ["lib", "web", "test/support"]
  defp elixirc_paths(_),     do: ["lib", "web"]

  # Specifies your project dependencies
  #
  # Type `mix help deps` for examples and options
  defp deps do
    [{:phoenix, "~> 1.0.1"},
     {:phoenix_ecto, "~> 1.1"},
     {:mariaex, ">= 0.0.0"},
     {:phoenix_html, "~> 2.1"},
     {:phoenix_live_reload, "~> 1.0", only: :dev},
     {:cowboy, "~> 1.0"},
     {:timex, ">= 0.0.0"},
     {:exrm, "~> 0.19.9"},
     {:rebar3_hex, ">= 0.0.0"},
     {:plug_forwarded_peer, "~> 0.0.2" }
   ]
  end
end

您似乎在嘗試在發行版中使用熱代碼加載。 這是一個很棒的功能,但是如果您想更新諸如要運行的Elixir版本之類的東西,它就非常復雜。

對於簡單的情況,生成的upup很好,但是對於更復雜的appup,可能會嚴重缺乏。 主要問題是更新正在運行的進程,更改狀態,升級ets表等。您需要考慮您的應用程序以及所有依賴項。 編寫和測試正確的升級(和降級)指令可能會非常耗時。 有時候這是值得的,但是我要說,在大多數情況下,傳統的滾動發布(以保證正常運行時間)可能是一種更簡單明了的解決方案-足夠好。

就個人而言,正是出於上述原因,我在生產中使用發行版,而不在熱代碼加載部分中使用發行版。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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