Как использовать Nitrogen в качестве интерфейса графического интерфейса для приложения на Erlang?

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

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

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

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

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


person Oliver Mason    schedule 10.05.2011    source источник


Ответы (3)


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

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

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

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

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

The full path to your beam files should be

"$NITROGEN/apps/my_app-1.0/ebin"
. Whenever Nitrogen starts it will add to the code path all your beam files. Then, if in your code you have the function that starts your stuff say: main_server:start(). You will change the quickstart.sh found in $NITROGEN/Quickstart/quickstart.sh to appear this way.

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)" \
    -eval "main_server:start()"

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

person Muzaaya Joshua    schedule 17.05.2011

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

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

person probsolver    schedule 11.05.2011

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

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

person Roman Shestakov    schedule 13.01.2013