2015-11-25 1 views
1

У меня есть простой сайт, написанный в elixir/phoenix. Я сделал некоторые изменения сегодня и хотел развернуть его для производства.релиз релиза не получается из-за отсутствующего файла appix elixir

Я оттолкнула мою репо, вытащил его на сервере и построен релиз с:

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 
+0

Вы также можете использовать 'ликероводочный завод' для своих выпусков, поскольку он заменен' exrm': - [Официальная документация Hexdocs ликеро-водочного завода с фениксом] (https://hexdocs.pm/distillery/use-with-phoenix.html# содержание) - [Средняя статья, описывающая использование ликероводочных изделий] (https://hackernoon.com/mastering-elixir-releases-with-distillery-a-pretty-complete-guide-497546f298bc) – SSchneid

ответ

2

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

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

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

+0

У меня не было реального намерения делать горячий код погрузка. Можете ли вы сказать мне, что я должен изменить, чтобы перейти к релизам, как вы? –

+1

Мы создаем выпуск в CI, но его создание также должно работать. Может быть, если вы попытаетесь создать его без того, чтобы старые релизы лежали вокруг него, он не попытается создать файл '.appup', с которым у него проблемы. – michalmuskala