我正在尝试在嵌入式模式下的应用程序(如dep)中使用YAWS。我正在使用rebar3。我的应用程序通过debar生成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

我想念什么?为什么它仍在启动以及为什么使用配置文件?

最佳答案

我怀疑您指定的是Yaws应该在发行版开始时启动,与发行版中的其他应用程序相同。基本上,等效于调用application:start(yaws).的操作应该是加载Yaws但不启动它-等效于application:load(yaws),我相信可以通过在{yaws, load}文件的relx部分中指定rebar.config来完成。然后,您应该在“在自己的主管下启动”部分下使用following these instructions in the Yaws documentation。根据您的特定需求,您可以调用yaws_api:embedded_start_conf/1,2,3,4之一来获取Yaws服务器conf,全局conf和子级规范。然后,您将使用子规范在主管下启动Yaws,如“使用Embedded_start_conf”中所述,然后设置Yaws配置服务器confs和global conf使其运行。

(顺便说一句,我是Yaws的贡献者,目前正在确保Yaws与rebar3兼容。我将向Yaws发行版中添加所需的任何源或文档,以帮助像您一样尝试在rebar3中使用的用户。)

10-04 13:33