erlang YAWS嵌入rebar3问题中作为依赖项

xxhby3vn  于 2022-12-08  发布在  Erlang
关注(0)|答案(2)|浏览(190)

我尝试在一个嵌入式模式的应用程序中使用YAWS(作为dep)。我使用的是rebar3。我的应用程序将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文件中列出的。(虽然不确定)如果我从这里删除,我不会得到文件在YAWs的版本。但当启动它是寻找配置文件,而不是像在嵌入式模式下的行为。

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

我错过了什么??为什么它还在启动,为什么它在使用配置文件?

sy5wg1nm

sy5wg1nm1#

我怀疑您是在指定Yaws应该在发行版开始时启动,就像发行版中的其他应用程序一样;基本上,相当于调用application:start(yaws).您应该做的是加载Yaws但不启动它-相当于application:load(yaws)-我相信您可以通过在rebar.config文件的relx部分指定{yaws, load}来完成这一点。然后您应该在"在您自己的主管下启动"部分下指定follow these instructions in the Yaws documentation。根据您的具体需要,调用其中一个yaws_api:embedded_start_conf/1,2,3,4来获取Yaws服务器配置、全局配置和子规范,然后使用子规范在您的主管下启动Yaws,如"使用embedded_start_conf"中所述,然后设置Yaws配置服务器配置和全局配置以使其运行。

66bbxpm5

66bbxpm52#

在我看来,嵌入yaws应用程序的整个过程记录得很差(我打算现在自己写一个指南和博客)--在某个时候,我感到困惑,认为application:start(yaws)是成功嵌入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

相关问题