【问题标题】:YAWS Embedded as dependence in rebar3 issueYAWS Embedded 作为 rebar3 问题中的依赖项
【发布时间】:2015-11-28 15:19:15
【问题描述】:

我正在尝试在嵌入式模式下的应用程序(作为 dep)中使用 YAWS。我正在使用rebar3。我的应用程序以 dep 的形式获得 yaws 并通过 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

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

【问题讨论】:

    标签: erlang rebar yaws


    【解决方案1】:

    我怀疑您指定 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 配置服务器 confs 和全局 conf 以使其运行。

    【讨论】:

    • 谢谢!就像你上面所说的,它似乎在 {applications, yaws} 下的 .app.src 中调用了 application:start(yaws) 。我从那里删除了它,并根据您的建议在发布部分将 {yaws, load} 添加到我的 relx 中,因此 yaws 代码作为发布的一部分添加到我的库中,但不会自动启动。现在效果很好!顺便说一句,期待您在 YAWS 上继续出色的工作,尤其是在 rebar3 上!您所有其他的帖子和文章也非常有帮助!再次感谢!
    【解决方案2】:

    在我看来,嵌入 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
    

    【讨论】:

      猜你喜欢
      • 2019-09-02
      • 2018-11-18
      • 1970-01-01
      • 2018-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多