YAWS嵌入对rebar3问题的依赖

时间:2015-09-02 23:10:45

标签: erlang rebar yaws

我正在尝试在嵌入模式下在应用程序(作为dep)中使用YAWS。我正在使用rebar3。我的应用程序因为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

我错过了什么?为什么它仍在启动以及它为什么使用配置文件?

2 个答案:

答案 0 :(得分:7)

我怀疑您指定Yaws应该在发布开始时启动,与发布中的其他应用程序相同;基本上,相当于调用application:start(yaws).你应该做的是加载雅司但不启动它 - 相当于application:load(yaws) - 我相信你可以通过在relx中指定{yaws, load}来做您rebar.config文件的一部分。然后你应该{&#34}在你自己的主管下开始{#3}}"部分。根据您的具体需求,您可以调用其中一个yaws_api:embedded_start_conf/1,2,3,4来获取Yaws服务器配置,全局配置和子规格。然后,您将使用子规范在您的主管下启动Yaws,如"使用embedded_start_conf"中所述,然后设置Yaws配置服务器confs和global conf以使其运行。

(BTW I' ma Yaws撰稿人,我目前正在确保Yaws与rebar3合作。我将添加Yaws发行版所需的任何资源或文档,以帮助像您这样的用户试图将它与rebar3一起使用。)

答案 1 :(得分:1)

在我看来,嵌入yaws应用程序的整个过程记录很少(我打算自己编写一个指南和博客) - 在某些时候我感到困惑并认为应用程序:start(yaws)是必需的为了成功嵌入雅司而打电话,所以我把它放在我最高级别的主管代码中。我一定忘记删除它,然后我花了很多时间尝试调试以下奇怪的错误(Yaws实际上仍在工作,但他们看起来很恐怖)。这里建议的修复程序也适用于我,删除应用程序:从代码中启动(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