Преимущество файла ".app" в Erlang? - PullRequest
7 голосов
/ 29 ноября 2009

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

Есть ли другое использование таких файлов?

Ответы [ 2 ]

11 голосов
/ 29 ноября 2009

* .app вместе с файлом * .rel используется для генерации загрузочных скриптов. Загрузочный скрипт используется для автоматического запуска моего приложения при запуске erlang. Файл ресурса приложения описывает, какие приложения должны быть запущены, прежде чем моё приложение может быть запущено. Например, если я использую mnesia и укажу это в файле .app для своего приложения, когда я сгенерирую загрузочный скрипт и использую его для запуска приложения, он запустит mnesia для меня при запуске моего собственного приложения.

Хотя вы можете получить автоматическую установку / обработку зависимостей с другими менеджерами пакетов, загрузочный скрипт полезен для управления зависимостями при запуске вашего приложения, что важно при настройке приложения OTP.

note : приложения в otp ссылаются на набор запущенных процессов и / или кода. приложения могут зависеть от других приложений несколькими способами. Либо они требуют, чтобы код был установлен, либо они требуют, чтобы приложение работало.

8 голосов
/ 29 ноября 2009

Они используются для сборки релизов (с * .rel для генерации скриптов загрузки). Я рекомендую просто начать с файла * .app и обратного вызова поведения приложения. Что касается начала с OTP. Это приятное место в разработке:

-module(foo).
-export([start/0]).
start() ->
    [application:start(A) || A <- [sasl, inets, x, y, etc]].

чтобы запустить все приложения, от которых вы зависите, с помощью простого

$ erl -s foo
  • Если ваш проект будет использоваться в качестве службы или платформы для других проектов, еще одно преимущество заключается в том, что эти приложения Erlang могут, в свою очередь, зависеть от вашего приложения или включать его. Приложение Erlang - это модуль, в котором можно предоставлять сервисы и даже библиотеки (stdlib - это библиотека, никаких «движущихся частей», только библиотечные модули).
  • Будучи приложением Erlang, вы получаете простой способ передачи параметров конфигурации в ваше приложение. Когда вы передаете -mnesia dir '"/some/path"' в erl, приложение mnesia обращается к нему как application:get_env(mnesia, dir). Если вы определяете приложение с именем foo, вы можете передать -foo key 'some-Erlang-literal' в erl. Файл * .app может содержать значения по умолчанию в разделе env, файл * .rel переопределяет их, а командная строка переопределяет это.
  • В файле * .app есть разделы, в которых вы перечисляете модули и зарегистрированные процессы, представленные вашим приложением. Это используется при сборке релизов, чтобы проверить, нет ли коллизий между приложениями.

Некоторые дополнительные функции приложений Erlang, которые я не очень хорошо знаю:

  • Начальные фазы. Используется для приложений, имеющих сложные начальные потребности, такие как некоторое время «частичного запуска».
  • Распределенные приложения. Используется для определения места запуска приложения в кластере.
  • поглощения. Используется для освобождения компьютера из распределенного приложения, например, если оно нуждается в обслуживании или обновлении.

Со временем вы начнете хотеть запускать свой набор приложений более структурированным образом, и тогда весь релиз / загрузочный скрипт станет более понятным. Или наоборот, вы будете думать, что это излишне для ваших конкретных потребностей. Просто начните с простого * .app и модуля с обратными вызовами поведения приложения. Ты не оглянешься назад.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...