首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用特定于yaws_api的代码时,Yaws“进程已死”

当使用特定于yaws_api的代码时,Yaws“进程已死”
EN

Stack Overflow用户
提问于 2012-10-28 21:12:59
回答 1查看 197关注 0票数 0

我有一个小的雅斯appmod测试:

代码语言:javascript
复制
-module(webservice).
-include("../include/yaws_api.hrl").
-compile(export_all).

http(parse_query,Arg) ->
    yaws_api:parse_query(Arg);

out(Arg) -> 
    {html, [http(parse_query,Arg)]}.

当运行yaws_api:parse_query函数时,我从yaws交互模式得到以下错误报告:

代码语言:javascript
复制
Yaws process died: {function_clause,
                   [{yaws_server,binary_size,
                        [0,{"i",undefined}],
                        [{file,"yaws_server.erl"},{line,3015}]},
                    {yaws_server,binary_size,2,
                        [{file,"yaws_server.erl"},{line,3018}]},
                    {yaws_server,binary_size,2,
                        [{file,"yaws_server.erl"},{line,3018}]},
                    {yaws_server,deflate_accumulated,4,
                        [{file,"yaws_server.erl"},{line,3712}]},
                    {yaws_server,deliver_accumulated,4,
                        [{file,"yaws_server.erl"},{line,3666}]},
                    {yaws_server,finish_up_dyn_file,2,
                        [{file,"yaws_server.erl"},{line,2745}]},
                    {yaws_server,aloop,4,
                        [{file,"yaws_server.erl"},{line,1175}]},
                    {yaws_server,acceptor0,2,
                        [{file,"yaws_server.erl"},{line,1016}]}]}

appmod在config中设置为:

代码语言:javascript
复制
<server localhost>
    port = 8080
    listen = 127.0.0.1
    #docroot = /usr/share/yaws
    docroot = /usr/lib/yaws/www
    appmods = </,webservice>
    # dir_listings = true
</server>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-29 03:38:08

尽管您没有显示它,但是看起来您试图访问的URL有一个查询字符串,该字符串至少有一个名为i的变量,如下所示:

代码语言:javascript
复制
http://example.com/foo?i=10

对于该URL,yaws_api:parse_query/1将返回[{"i","10"}],然后尝试使用{html, iolist()}结构将其作为HTML返回给Yaws。不幸的是,[{"i","10"}]不是iolist、字符串或二进制文件,所以Yaws失败了。

您可以通过使用yaws_api:f/2调用将[{"i","10"}]转换为字符串来解决此问题,如下所示:

代码语言:javascript
复制
out(Arg) ->
    {html, yaws_api:f("~p", [http(parse_query,Arg)])}.

或者使用标准的io_lib:format/2调用:

代码语言:javascript
复制
out(Arg) ->
    {html, io_lib:format("~p", [http(parse_query,Arg)])}.

yaws_api:f/2函数只是io_lib:format/2的包装器。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13109062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档