выпуск микса не работает из-за отсутствия файла приложения эликсира

У меня есть простой веб-сайт, написанный на эликсире/фениксе. Сегодня я внес некоторые изменения и хотел развернуть их в рабочей среде.

Я отправил свой репозиторий, загрузил его на рабочий сервер и создал выпуск с:

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 работает под эликсиром 1.1.0, новая версия 0.0.7 с 1.1.1.

мой микс.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

person Herman verschooten    schedule 25.11.2015    source источник
comment
Вы также можете использовать distillery для своих выпусков, так как он заменил exrm: - Официальная документация Hexdocs винокурня с фениксом - Статья на Medium описание использования винокурни   -  person sebisnow    schedule 27.02.2018


Ответы (1)


Похоже, вы пытаетесь использовать горячую загрузку кода в выпусках. Это отличная функция, но она очень сложна, если вы хотите обновить такие вещи, как версия Эликсира, с которой вы работаете.

Для простых случаев сгенерированные приложения хороши, но для более сложных их может не хватать. Основная проблема — это обновление запущенных процессов, изменение состояния, обновление ets-таблиц и т. д. Вам необходимо учитывать ваше приложение, а также все ваши зависимости. Написание и тестирование правильных инструкций по обновлению (и понижению версии) может занять много времени. Иногда это того стоит, но я бы сказал, что в большинстве случаев традиционный скользящий выпуск (чтобы гарантировать время безотказной работы) может быть гораздо более простым и понятным решением — достаточно хорошим.

Лично я использую выпуски в производстве, но не часть загрузки горячего кода, именно по причинам, указанным выше.

person michalmuskala    schedule 26.11.2015
comment
У меня не было реального намерения выполнять горячую загрузку кода. Можете ли вы сказать мне, что я должен изменить, чтобы перейти к релизам, как вы? - person Herman verschooten; 27.11.2015
comment
Мы собираем релиз в CI, но локально тоже должно работать. Возможно, если вы попробуете собрать его без старых релизов, лежащих вокруг, он не будет пытаться сгенерировать файл .appup, с которым у него проблемы. - person michalmuskala; 28.11.2015