【问题标题】:mix release fails on missing elixir appup file缺少 elixir appup 文件,混合发布失败
【发布时间】:2018-02-28 03:49:18
【问题描述】:

我有一个用 elixir/phoenix 编写的简单网站。 我今天做了一些更改,想将其部署到生产环境中。

我推送了我的 repo,将其拉到生产服务器上并构建了一个版本:

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 exrm


【解决方案1】:

您似乎正在尝试在版本中使用热代码加载。这是一个很棒的功能,但是如果你想更新你正在运行的 Elixir 版本之类的东西,它会非常复杂。

对于简单的情况,生成的应用程序很好,但对于更复杂的情况,它可能严重缺乏。主要问题是更新正在运行的进程、更改状态、升级 ets 表等。您需要考虑您的应用程序以及所有依赖项。编写和测试正确的升级(和降级)指令可能非常耗时。有时这是值得的,但我想说的是,在大多数情况下,传统的滚动发布(以保证正常运行时间)可能是一种更简单直接的解决方案 - 一个足够好的解决方案。

就个人而言,我在生产中使用版本,但不是热代码加载部分,正是出于上述原因。

【讨论】:

  • 我并没有真正打算进行热代码加载。你能告诉我我必须改变什么才能像你一样发布吗?
  • 我们正在 CI 中构建版本,但在本地构建它也应该可以工作。也许如果您尝试在没有旧版本的情况下构建它,它不会尝试生成它遇到问题的.appup 文件。
猜你喜欢
  • 2016-05-12
  • 1970-01-01
  • 1970-01-01
  • 2013-06-10
  • 2017-11-08
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多