Когда я начинал знакомство с эрлангом - с релизами у меня сразу не сложилось.
Раз конфиг, два конфиг, прорва нюансов, не самая понятная документация.
Решил что мне и без них живётся неплохо.
А тут вдруг попалось мне чудесное сочетание erlang.mk авторства Loïc Hoguin и relx от Erlware.
И с ними вдруг оказалось что создать релиз - дело пяти минут.
Конспект-шпаргалка с самого нуля:
1. Создаём папку
2. Скачиваем erlang.mk
3. Создаём каркас приложения
make -f erlang.mk bootstrap
make -f erlang.mk bootstrap-rel
(подробности см. в readme репозитория erlang.mk)
4. Смотрим в файл Makefile
Он содержит в себе необходимый минимум:
5. Проверяем:
Отлично, всё компилируется.
6. Добавим в Makefile каких-нибудь зависимостей, просто чтоб показать как это делается:
PROJECT = tst
DEPS=mongodb gproc
dep_mongodb = git https://github.com/comtihon/mongodb-erlang.git HEAD
include erlang.mk
обращаем внимание: про часть библиотек erlang.mk "знает". Например, gproc. Подробности опять же в readme. А те, про которые он не разумеет - необходимо добавлять руками, пример одного из способов - выше.
7. проверяем:
make
Видим как все зависимости скачались и скомпилировались вместе с нашим приложением
8. по отдельности:
make clean
make deps
make app
Всё работает!
9. [много вырезано] Все шаги которые тут были ранее, по скачиванию и настройке relx, ныне делает сам erlang.mk
10. Добавляем приложения, от которых мы зависим в список applications файла src/tst.app.src. Тогда они будут запущены при старте автоматически.Получаем в итоге:
11. А вот и всё. Если мы запускали make -f erlang.mk bootstrap-rel, то релиз у нас уже собирается автоматически и результат лежит в папке _rel
12. Проверяем созданный релиз:
Запускаем:
bin/tst_release console - запустить вместе с erlang shell, наглядно
bin/tst_release start - запустить демоном.
bin/tst_release stop
bin/tst_release restart
значение достаточно очевидно :)
bin/tst_release attach - запустить шелл и прицепиться к запущенному в фоне процессу.
остальные параметры можно посмотреть просто запустив bin/tst_release (а ещё лучше - просто прочитав исходник)
Вот собственно и всё, вот он - готовый рабочий релиз :)
Логи лежат в папке log, можно их поглядеть например командой
tail -f log/erlang.log.1
13. Ещё чуточку добавлю.
Довольно важная опция в relx.config - можно добавить
Тогда runtime system не будет добавлена в релиз, а это значит две вещи:
а) на машине куда будет поставлен релиз необходимо наличие установленного эрланга
б) нам будет всё равно какая архитектура на целевой машине
Если включать erts, то целевая машина должна быть той же архитектуры как и та на которой собран релиз.
Кажется, всё?
(проверено и приведено к актуальному виду 14 декабря 2014 года)
Раз конфиг, два конфиг, прорва нюансов, не самая понятная документация.
Решил что мне и без них живётся неплохо.
А тут вдруг попалось мне чудесное сочетание erlang.mk авторства Loïc Hoguin и relx от Erlware.
И с ними вдруг оказалось что создать релиз - дело пяти минут.
Конспект-шпаргалка с самого нуля:
1. Создаём папку
mkdir tst cd tst
2. Скачиваем erlang.mk
wget https://raw.github.com/extend/erlang.mk/master/erlang.mk
3. Создаём каркас приложения
make -f erlang.mk bootstrap
make -f erlang.mk bootstrap-rel
(подробности см. в readme репозитория erlang.mk)
4. Смотрим в файл Makefile
Он содержит в себе необходимый минимум:
PROJECT=tst include erlang.mk
5. Проверяем:
make ERLC tst_sup.erl tst_app.erl APP tst.app.src.....
Отлично, всё компилируется.
6. Добавим в Makefile каких-нибудь зависимостей, просто чтоб показать как это делается:
PROJECT = tst
DEPS=mongodb gproc
dep_mongodb = git https://github.com/comtihon/mongodb-erlang.git HEAD
include erlang.mk
обращаем внимание: про часть библиотек erlang.mk "знает". Например, gproc. Подробности опять же в readme. А те, про которые он не разумеет - необходимо добавлять руками, пример одного из способов - выше.
7. проверяем:
make
Видим как все зависимости скачались и скомпилировались вместе с нашим приложением
8. по отдельности:
make clean
make deps
make app
Всё работает!
9. [много вырезано] Все шаги которые тут были ранее, по скачиванию и настройке relx, ныне делает сам erlang.mk
10. Добавляем приложения, от которых мы зависим в список applications файла src/tst.app.src. Тогда они будут запущены при старте автоматически.Получаем в итоге:
{application, tst, [ {description, ""}, {vsn, "0.0.1"}, {registered, []}, {applications, [ kernel, stdlib, gproc, ]}, {mod, { tst_app, []}}, {modules, [ tst_app, tst_sup ]}, {env, []} ]}.
11. А вот и всё. Если мы запускали make -f erlang.mk bootstrap-rel, то релиз у нас уже собирается автоматически и результат лежит в папке _rel
12. Проверяем созданный релиз:
cd _rel/tst_release ls bin erts-6.0 lib releases
Запускаем:
bin/tst_release console - запустить вместе с erlang shell, наглядно
bin/tst_release start - запустить демоном.
bin/tst_release stop
значение достаточно очевидно :)
bin/tst_release attach - запустить шелл и прицепиться к запущенному в фоне процессу.
остальные параметры можно посмотреть просто запустив bin/tst_release (а ещё лучше - просто прочитав исходник)
Вот собственно и всё, вот он - готовый рабочий релиз :)
Логи лежат в папке log, можно их поглядеть например командой
tail -f log/erlang.log.1
13. Ещё чуточку добавлю.
Довольно важная опция в relx.config - можно добавить
{include_erts, "/path/to/alternate/erlang"} или
{include_erts, false}.Тогда runtime system не будет добавлена в релиз, а это значит две вещи:
а) на машине куда будет поставлен релиз необходимо наличие установленного эрланга
б) нам будет всё равно какая архитектура на целевой машине
Если включать erts, то целевая машина должна быть той же архитектуры как и та на которой собран релиз.
Кажется, всё?
(проверено и приведено к актуальному виду 14 декабря 2014 года)
Комментариев нет:
Отправить комментарий