YAWS Embedded как зависимость в выпуске rebar3
Я пытаюсь использовать YAWS в приложении (как dep) во встроенном режиме. Я использую rebar3. Мое приложение получает рыскание при развертывании и сборке через rebar3 (после некоторой настройки) и выпускает нормально, но когда я запускаю его, происходит сбой YAWS. Похоже, он пытается запустить даже через это должно быть во встроенном режиме.
Я пытаюсь настроить yaws.app.src во встроенный режим env следующим образом:
{application,yaws,
[{description,"yaws WWW server"},
{vsn, {cmd, "sed -ne '1,/^YAWS_VSN=/s/^YAWS_VSN=//p' vsn.mk 2>/dev/null"}},
{modules,[]},
{registered, []},
{mod,{yaws_app,[]}},
{env, [
{embedded, true} % true | false
]},
{applications,[kernel,stdlib@APPDEPS@]}]}.
Я думаю, что он запускается автоматически, поскольку он указан как приложение в моем файле app.src. (Хотя не уверен) Если я удалю отсюда, я не получу файлы в выпуске для YAWs. Но при запуске он ищет файл конфигурации и не работает как во встроенном режиме.
=INFO REPORT==== 2-Sep-2015::19:00:58 ===
Yaws: Using config file /Users/someuser/csvp/_build/default/lib/yaws/etc/yaws/yaws.conf
Что мне не хватает?? Почему он все еще запускается и почему он использует файл конфигурации?
2 ответа
Я подозреваю, что вы указываете, что Yaws должен запускаться при запуске релиза, как и другие приложения в релизе; в основном эквивалент вызова application:start(yaws).
Вместо этого вы должны загружать Yaws, но не запускать его - эквивалент application:load(yaws)
- что я считаю, что вы можете сделать, указав {yaws, load}
в разделе relx вашего rebar.config
файл. Затем вы должны следовать этим инструкциям в документации по Yaws в разделе "Запуск под своим собственным руководителем". В зависимости от ваших конкретных потребностей, вы можете позвонить одному из yaws_api:embedded_start_conf/1,2,3,4
чтобы получить серверные конфы Yaws, глобальные конф, и дочерние спецификации. Затем вы будете использовать дочерние спецификации для запуска Yaws под своими супервизорами, как описано в разделе "Использование встроенного_старта_конф.", А затем для настройки сервера конфигурации Yaws и глобального конф.
(Кстати, я участник Yaws и в настоящее время проверяю, работает ли Yaws с rebar3. Я буду добавлять любые источники или документы, необходимые для распространения Yaws, чтобы помочь таким пользователям, как вы, пытаться использовать его с rebar3.)
Весь процесс внедрения приложения yaws, на мой взгляд, довольно плохо документирован (я собираюсь собрать руководство и опубликовать его самостоятельно) - в какой-то момент я запутался и подумал, что приложение:start(yaws) было обязательным вызовом для того, чтобы чтобы успешно вставлять рыскания, поэтому я поместил его в код моего руководителя высшего уровня. Должно быть, я забыл удалить его, а затем я потратил целую вечность, пытаясь отладить следующие странные ошибки (Yaws на самом деле работал до сих пор, но они выглядят страшно выглядящими ошибками). Предлагаемое здесь исправление сработало и для меня, удалите приложение:start(yaws) из вашего кода.
=ERROR REPORT==== 28-Dec-2015::08:10:55 ===
Failed to load setuid_drv (from "/usr/home/ec2-user/myapp/_build/default/lib/yaws/priv/lib") : "Cannot open \"/usr/home/ec2-user/myapp/_build/default/lib/yaws/priv/lib/setuid_drv.so\""
=ERROR REPORT==== 28-Dec-2015::08:10:55 ===
FATAL {'EXIT',normal}
=INFO REPORT==== 28-Dec-2015::08:10:55 ===
application: yaws
exited: {{shutdown,
{failed_to_start_child,yaws_server,
{badconf,
[{yaws_server,init,1,
[{file,
"/usr/home/ec2-user/myapp/_build/default/lib/yaws/src/yaws_server.erl"},
{line,190}]},
{gen_server,init_it,6,
[{file,"gen_server.erl"},{line,328}]},
{proc_lib,init_p_do_apply,3,
[{file,"proc_lib.erl"},{line,240}]}]}}},
{yaws_app,start,[normal,[]]}}
type: temporary
ok