Spec-Zone.ru › Elixir 1.11

mix compile.app

Создаёт файл .app.

Файл .app — это файл, содержащий Erlang-термы, которые определяют ваше приложение. Mix автоматически генерирует этот файл на основе вашей mix.exs конфигурации.

Для генерации файла .app, Mix ожидает, что в вашем проекте будут присутствовать ключи :app и :version. Кроме того, вы можете настроить сгенерированное приложение, определив функцию application/0 в вашем mix.exs, которая возвращает список ключевых слов.

Наиболее часто используемые ключи:

  • :extra_applications — список OTP-приложений, от которых зависит ваше приложение, которые не включены в :deps (обычно определяются в deps/0 в вашем mix.exs). Например, здесь вы можете объявить зависимость от приложений, поставляемых с Erlang/OTP или Elixir, таких как :crypto или :logger. Дополнительные необязательные приложения могут быть объявлены как кортеж, например {:ex_unit, :optional}. Mix гарантирует, что все необязательные приложения будут запущены до запуска вашего приложения.

  • :registered — имена всех зарегистрированных процессов в приложении. Если ваше приложение определяет локальный GenServer с именем MyServer, рекомендуется добавить MyServer в этот список. Это особенно полезно для обнаружения конфликтов между приложениями, которые регистрируют одинаковые имена.

  • :env — значения по умолчанию для среды приложения. Среда приложения — один из самых распространённых способов конфигурирования приложений. См. модуль Application для механизмов чтения и записи в среду приложения.

Например:

def application do
  [
    extra_applications: [:logger, :crypto, ex_unit: :optional],
    env: [key: :value],
    registered: [MyServer]
  ]
end

Другие варианты включают:

  • :applications — все приложения, от которых зависит ваше приложение во время выполнения. По умолчанию этот список автоматически определяется по вашим зависимостям. Mix и другие инструменты используют список приложений, чтобы запустить ваши зависимости до запуска самого приложения.

  • :mod — указывает модуль, который необходимо вызвать при запуске приложения. Он должен быть в формате {Mod, args}, где args часто является пустым списком. Указанный модуль должен реализовывать колбэки, определённые модулем Application.

  • :start_phases — указывает список фаз и их аргументов, которые должны быть вызваны после запуска приложения. См. раздел «Фазы» ниже.

  • :included_applications — указывает список приложений, которые будут включены в приложение. Основное приложение отвечает за запуск дерева управления всеми включёнными приложениями, так как только основное приложение будет запущено. Процесс во включённом приложении считает себя принадлежащим основному приложению.

  • :maxT — указывает максимальное время работы приложения в миллисекундах. Приложения останавливаются, если достигается :maxT, и их надзорный процесс завершается с причиной :normal. Этот порог технически допустим в любом файле ресурсов, но он эффективен только для приложений с модулем обратного вызова. По умолчанию :infinity.

Помимо вышеперечисленных параметров, файлы .app также ожидают других параметров, таких как :modules и :vsn, но они автоматически добавляются Mix.

Параметры командной строки

  • --force — принудительно выполняет компиляцию независимо от времени модификации
  • --compile-path — местоположение файлов .beam и записи результирующего файла .app, по умолчанию Mix.Project.compile_path/0

Фазы

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

Посмотрим пример функции MyApp.application/0:

def application do
  [
    start_phases: [init: [], go: [], finish: []],
    included_applications: [:my_included_app]
  ]
end

И пример :my_included_app определяет в своём mix.exs функцию:

def application do
  [
    mod: {MyIncludedApp, []},
    start_phases: [go: []]
  ]
end

В этом примере порядок вызова обратных вызовов приложения следующий:

Application.start(MyApp)
MyApp.start(:normal, [])
MyApp.start_phase(:init, :normal, [])
MyApp.start_phase(:go, :normal, [])
MyIncludedApp.start_phase(:go, :normal, [])
MyApp.start_phase(:finish, :normal, [])

© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/mix/1.11.2/Mix.Tasks.Compile.App.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API