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
Другие вопросы по тегам