These are chat archives for synrc/n2o

13th
Jun 2017
221V
@221V
Jun 13 2017 22:01

как обычно, только сотри что бы порты не перекрывали друг друга...
sys.config {port,8000}

так не получается - потому что когда запущен первый app

make start
make attach
make attach

тогда второй не запускается

to_erl rels/web/devbox/
No running Erlang on pipe rels/web/devbox/erlang.pipe: No such file or directory
otp.mk:43: recipe for target 'attach' failed

-define(INSTANCE,app2).
init([]) ->
    cowboy:start_http(?INSTANCE,?CONFIG:cowboy_nb_acceptors(),port(),env()), ***

port()   -> [ { port, wf:config(app2,port,8000)  } ].
-module(app1_routes).
-include_lib("n2o/include/wf.hrl").
-export([init/2, finish/2]).
-include("app1.hrl").

finish(State, Ctx) -> {ok, State, Ctx}.

init(State, Ctx) ->
    Req=Ctx#cx.req,
    {Port,_Req2} = cowboy_req:port(Req),
    case Port of
        8000 -> {ok, State, Ctx#cx{module=app1_main}};
        8001 -> app2_routes:init(State,Ctx);
        8002 -> app3_routes:init(State,Ctx)
    end.
я правильно понимаю --
если так сделать - то второй апп не будет работать когда будет остановлен первый апп ?
как сделать запуск и остановку второго аппа независимо от первого?
Roman
@AstRonin
Jun 13 2017 22:07
попробуй в разных папках запускать разные приложения
221V
@221V
Jun 13 2017 22:12
я так и пробовал, когда запущено первое - второе не запускается

если добавить тот кусочек кода который подсказали выше

Compiling /apps/p2_api/src/p2_api.erl
Line 19: error {undefined,'CONFIG',none} in "/apps/p2_api/src/p2_api.erl"
Line 4: error {undefined_function,{init,1}} in "/apps/p2_api/src/p2_api.erl"

откуда берется ?CONFIG и что там должно быть? у меня в модуле такого макроса нет, что подключать?

221V
@221V
Jun 13 2017 22:31

нашел такое

cowboy:start_http(http,3,port(),env()),

но как отдельно независимо запустить - так и не понял

Namdak Tonpa
@5HT
Jun 13 2017 23:10
зависимость не запускается, запускается приложение
есть зависимости, которые оформлены в виде OTP приложений, но которые не стартуют никаких процессов кроме собственно application и supervisor
init([]) ->
    cowboy:start_http(?INSTANCE,?CONFIG:cowboy_nb_acceptors()
откуда ты это скопировал?
221V
@221V
Jun 13 2017 23:12
уточнение -- названия модулей в разных приложениях должны быть разными?
имею ввиду - допускается иметь в одном приложениее модуль test777 и в другом приложении модуль с таким же названием test777 или нет?
Namdak Tonpa
@5HT
Jun 13 2017 23:12
в n2o уже давно не так запускается
все модули во всех приложения не должны пересекаться
проверить просто code:clash().
221V
@221V
Jun 13 2017 23:13

откуда ты это скопировал?

так выше по чату скинули

Namdak Tonpa
@5HT
Jun 13 2017 23:13
ну он же пример скинул
очеивдно что ?CONFIG:cowboy_nb_acceptors() означает просто число
?CONFIG — это модуль
а cowboy_nb_acceptors — функция в этом модуле которая возвращает число
он тебе скинул исчерпывающий пример как работать с ковбем запущенным на разных портах
я даже не знаю что добавить )
вот как стартует ковбой в review
init([]) -> {ok, {{one_for_one, 5, 10}, [spec()]}}.
spec() -> ranch:child_spec(http, 100, ranch_tcp, port(), cowboy_protocol, env()).
221V
@221V
Jun 13 2017 23:16
все модули во всех приложения не должны пересекаться
а как же deps ?
Namdak Tonpa
@5HT
Jun 13 2017 23:17
ВСЕ МОДУЛИ ВО ВСЕХ ПРИЛОЖЕНИЯХ
достаточно конкретно
в пределах виртуальной машины не должно быть двух одинаковых модулей
221V
@221V
Jun 13 2017 23:17
понял, а где редактируется название ноды?
Namdak Tonpa
@5HT
Jun 13 2017 23:18
$ cat vm.args
-name review@127.0.0.1
все, что ты спрашиваеш — есть в review приложении
вот пример запуска двух ковбоев
221V
@221V
Jun 13 2017 23:19
так вот почему не получалось запустить второй апп
Namdak Tonpa
@5HT
Jun 13 2017 23:19
init([]) -> {ok, {{one_for_one, 5, 10}, [spec1(),spec2()]}}.
spec1() -> ranch:child_spec(http, 100, ranch_tcp, 8000, cowboy_protocol, env()).
spec2() -> ranch:child_spec(http, 100, ranch_tcp, 8001, cowboy_protocol, env()).
221V
@221V
Jun 13 2017 23:19
потому что и там и там одно и то же название ноды у меня
понял, благодарю
Namdak Tonpa
@5HT
Jun 13 2017 23:19
название ноды одно для одной ноды
пока нода одна, название у нее одно :-)
node().
ты лучше бы книжку по эрлангу прочитал
а то третий месяц глупые вопросы спрашиваешь )
это ж не рокет сайнс
тут же все просто
есть нода, у нее есть приложения и супервизоры, каждое приложение состоит из модулей
221V
@221V
Jun 13 2017 23:22
читаю сразу две, правда медленно
благодарю за помощь)
Namdak Tonpa
@5HT
Jun 13 2017 23:22
каждый модуль из фунций
есть рекорды и ETS таблицы
больше ничего знать не нужно
надо знать как выглядить вызов функции
Module:Function(Arg1,Arg2,...Argn).
чтобы не спрашивать что такое ?UNKNOWN:unknown()
мы же в n2o намеренно не используем всю эту эриксоновскую муть
с ОТР
чтобы было проще
я врядли верю что вам в продакшине нужно пускать несколько ковбоев
явно ты не по правильному пути идешь
там же с ковбоем идут расширенные примеры на все случае жизни
уверен там есть пример запуска нескольких
а не, нет
Namdak Tonpa
@5HT
Jun 13 2017 23:28
вообщем юзай так как я сказал
spec1, spec2 чайлдспеки ковбоевские
и почитай почему оно так работает
используй observer:start(). для мониторинга процессов
Namdak Tonpa
@5HT
Jun 13 2017 23:35
чтобы увидеть два супервизора и отпочкованые процессы
http, 100, ranch_tcp вот тут вместо 100 можно 3-5 поставить чтобы посмотреть что изменится на картинке обсервера