Как я могу использовать азот в качестве интерфейса GUI для приложения Erlang? - PullRequest
2 голосов
/ 11 мая 2011

У меня есть базовое серверное приложение Erlang (еще не полностью OTP), которое я запускаю из командной строки. Я хочу превратить его в интерактивную систему, использующую браузер в качестве графического интерфейса с азотом (версия 2.0.4). Генеральный план на

  • превратить текущий модуль в gen_server в качестве части MODEL; он анализирует данные и генерирует из них события, которые отражают определенные свойства данных, которые меня интересуют.
  • добавить модуль CONTROLLER, который является одновременно gen_event (для сбора событий, генерируемых моделью) и gen_server (для разрешения запросов из интерфейса GUI)
  • использовать азот в качестве ВИДА, обновляя соответствующие страницы средствами Ajax посредством обращений к модулю контроллера (который, в свою очередь, запрашивает модель)

Насколько я вижу, мне нужен общий диспетчер приложений с тремя дочерними элементами: модель, представление и контроллер. Затем они общались друг с другом через API, сопоставленные с режимами связи OTP.

И вот где я застрял: я должен поместить все это в дерево каталогов азота? Должен ли я установить новую структуру dir приложения и иметь там три компонента (включая азот)? Что именно мне нужно сделать, чтобы запустить сервер Nitrogen в качестве дочернего элемента моего супервизора приложений (сценарий запуска Nitrogen выглядит довольно сложным, чем я ожидал)? Я начал проходить Erlang и OTP в действии , но еще не закончил его. И мне нужно продемонстрировать систему послезавтра;)

Мне нужно набрать в командной строке «start.sh», а затем использовать браузер для подключения к приложению через азот.

Ответы [ 3 ]

1 голос
/ 11 мая 2011

Некоторое время назад я обнаружил это сообщение в блоге об использовании азота в качестве библиотеки под веб-сервером yaws . У Yaws есть много функций под капотом (например, встроенный режим), что делает его идеально подходящим для OTP-совместимых приложений.

Не полный ответ, но информация, которая может быть полезной, я надеюсь.

0 голосов
/ 13 января 2013

Вы можете попробовать шаги, описанные в этом сообщении в блоге http://rshestakov.wordpress.com/2012/12/30/how-to-install-nitrogen/

В нем объясняется, как добавить азот в качестве библиотеки зависимостей в ваше приложение

0 голосов
/ 17 мая 2011

Из-за того, как создано приложение для азота, вам не следует создавать приложение, тесно связанное с ним. Скорее, вы создаете свое приложение, предоставляете API для Nitrogen (API, которые вы будете вызывать из событий Nitrogen e.t.c).

Затем вы должны упаковать свое приложение как файловую систему OTP, поместив его в папку приложений азота. Когда азот создается или запускается, он добавляет ebin пути ваших приложений, если они находятся в его каталоге приложений.

Например: модель и контроллер будут реализованы в вашем приложении. Затем в вашем приложении вы выставляете вызовы функций в вашем модуле (которые могут вести себя как gen_server), которые вы вызываете прямо со своей страницы азота. Прелесть в том, что все они будут в одном и том же пути кода.

Что делать: вы смотрите на скрипт Nitrogen quickstart.sh , там, где он запускает erlang VM.

echo "Starting Nitrogen on Inets (http://localhost:8000)..."
erl \
    -name YOUR_NODE_NAME_HERE \
    -pa ./ebin ../apps/*/ebin ../apps/*/include \
    -env ERL_FULLSWEEP_AFTER 10 \
    -eval "application:start(nprocreg)" \
    -eval "application:start(quickstart)" \
    -eval "application:start(YOUR_APPLICATION)"

если ваше приложение не похоже на OTP, то создайте папку с именем «ebin», в которую вы поместите имеющиеся у вас файлы лучей. Создайте папку с именем «my_app-1.0» и вставьте эту папку ebin в эту папку

  Nitrogen--|--/apps --|--/my_app-1.0 --|--/ebin
            |--/doc
            |--/rel
            |--/support
            |--/Quickstart

Полный путь к вашим файлам луча должен быть

"$NITROGEN/apps/my_app-1.0/ebin"
. Всякий раз, когда Nitrogen запускается, он добавляет к пути кода все ваши файлы лучей. Затем, если в вашем коде есть функция, которая запускает ваши вещи, скажите: main_server:start(). Вы измените quickstart.sh, найденный в $NITROGEN/Quickstart/quickstart.sh, таким образом.
echo "Starting Nitrogen on Inets (http://localhost:8000)..."
erl \
    -name YOUR_NODE_NAME_HERE \
    -pa ./ebin ../apps/*/ebin ../apps/*/include \
    -setcookie YOUR_FUNNY_COOKIE_HERE \
    -mnesia dir '"PATH/TO/MNESIA/DIRECTORY"' \
    -env ERL_FULLSWEEP_AFTER 10 \
    -eval "application:start(nprocreg)" \
    -eval "application:start(quickstart)" \
    <b>-eval "main_server:start()"</b>

Преимущество этого заключается в том, что если вам случится изменить свое мнение на erlyweb , erlang web , вы не будете необходимо внести изменения в вашу модель или контроллер, а вы, скорее всего, выставили API, которые можно вызывать из любой библиотеки типов представлений.

...