Spec-Zone.ru › Elixir 1.12

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.12.0/Mix.Tasks.Compile.App.html

Spec-Zone.ru

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