Erlang запустить приложение в производство - PullRequest
5 голосов
/ 12 августа 2011

Когда я тестирую свое приложение erlang на localhost, у меня есть скрипт, который запускает сервер, который выглядит следующим образом:

#!/bin/sh
PWD="$(pwd)"
NAME="$(basename $PWD)"
erl -pa "$PWD/ebin" deps/*/ebin -boot start_sasl \
    -name devnode@127.0.0.1 \
    -s reloader \
    -s $NAME \
    -setcookie some_random_cookie \
    +K true \
    +P 65536 

Это предлагает открыть оболочку Erlang, и оттуда я бы что-то набралкак:

application:start(myapp)

Это хорошо для целей разработки, но как мне развернуть это в производстве?На данный момент единственный способ, которым я могу думать об этом, - это запустить процесс экрана и отсоединиться от него.Я не думаю, что это должно быть так.Я использую арматуру, если это вообще помогает.

Ответы [ 3 ]

6 голосов
/ 12 августа 2011

Звучит так, будто вы хотите использовать собственный загрузочный скрипт. Загрузочный скрипт сообщает системе erlang, с чего начать. В используемом вами скрипте вы устанавливаете загрузочный скрипт с помощью:

-boot start_sasl

http://www.erlang.org/doc/system_principles/system_principles.html, см. Раздел «Пользовательские загрузочные скрипты»

Более простым вариантом может быть преобразование приложения в использование арматуры: https://github.com/basho/rebar. После этого вы сможете сделать следующее:

./rebar compile generate

Это создаст выпуск для приложения, который позволит вам:

./rel/<app_name>/bin/<app_name>

Те же принципы, просто все для удобства использования.

5 голосов
/ 12 августа 2011

Добавьте параметр -detached.Документация обобщает это:

Запускает систему времени исполнения Erlang, отсоединенную от системной консоли.Полезно для запуска процессов демонов и фонов.

После этого вы можете запустить приложение с параметром -s.Предполагая $NAME = myapp, init попытается вызвать myapp:start/0 (вы можете настроить это, если хотите).Эта функция должна завершиться вызовом application:start(myapp).

Если вы можете получить все эти кусочки головоломки на месте, у вас должен быть рабочий скрипт.

0 голосов
/ 12 августа 2011

Ну, вы можете попробовать подключить его к Apache (см. Здесь) , или простое решение, которое не так хакерно, как сеансы экрана, - использовать nohup. Если вы на самом деле реализуете это на рабочем сервере и не хотите идти по пути Apache, вы можете рассмотреть сценарий init .

...