YAWS Embedded как зависимость в проблеме rebar3

Я пытаюсь использовать YAWS в приложении (как dep) во встроенном режиме. Я использую арматуру3. Мое приложение получает yaws как dep и строит через 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. (Хотя не уверен) Если я удалю отсюда, я не получу файлы в выпуске для YAW. Но при запуске ищет конфигурационный файл, а не работает как во встроенном режиме.

=INFO REPORT==== 2-Sep-2015::19:00:58 ===
Yaws: Using config file /Users/someuser/csvp/_build/default/lib/yaws/etc/yaws/yaws.conf

Что мне не хватает?? Почему он все еще запускается и почему он использует файл конфигурации?


person casillic    schedule 02.09.2015    source источник


Ответы (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 под вашими супервизорами, как описано в разделе «Использование embedded_start_conf», а затем установить confs сервера конфигурации Yaws и global conf, чтобы запустить его.

person Steve Vinoski    schedule 03.09.2015
comment
Спасибо! Как вы указали выше, кажется, что наличие его в .app.src в разделе {applications, yaws} вызывало приложение: start (yaws), как и должно быть. Я удалил его оттуда и, основываясь на вашем совете, добавил {yaws, load} в мой relx в разделе релиза, поэтому код yaws добавляется в мою библиотеку как часть релиза, но не запускается автоматически. Отлично работает сейчас! Кстати, с нетерпением жду продолжения вашей отличной работы над YAWS, особенно с rebar3! Все ваши другие посты и статьи тоже были очень полезны! Спасибо еще раз! - person casillic; 03.09.2015

Весь процесс встраивания приложения yaws, на мой взгляд, довольно плохо задокументирован (сейчас я намерен составить руководство и написать его в блог) - в какой-то момент я был сбит с толку и подумал, что application:start(yaws) был обязательным вызовом для того, чтобы для успешного встраивания рыскания, поэтому я поместил его в свой код супервизора самого высокого уровня. Я, должно быть, забыл удалить его, а затем я потратил целую вечность, пытаясь отладить следующие странные ошибки (Yaws на самом деле все еще работал, но они выглядели ужасно). Предложенное здесь исправление сработало и для меня, удалите application: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
person JediLuke    schedule 28.12.2015