erlang yaws在使用httpc时崩溃:请求由docker容器提供的URL

g9icjywg  于 2022-12-08  发布在  Erlang
关注(0)|答案(1)|浏览(135)

我在我的Docker堆栈中使用yawsadminer

location /adm/ {
        proxy_pass         http://adm:8080;
    }

如何在yaws中做到这一点?
我们的想法是直接从容器adm中获取结果,进入yaws容器并发出curl -v 'http://adm:8080'的操作与预期的一样。
我的Erlang代码很简单,但是我遇到了一个我无法理解的错误。我首先解析adm的URL,如果为true,则将URL从https://mydomain.tld/adm?foo=bar转换为http://adm:8080?foo=bar,然后调用out_adm

out_adm(Url, A) ->
    inets:start(),
    Http_result = httpc:request(Url),
    case Http_result of
        {ok, {{_Version, 200, _ReasonPhrase}, _Headers, Html}} ->               
?trace('out_check_adm(A)======PASS_THROUGH HTML====> Url', [Url]),  
                    Html; 
        _ -> 
            not_200 
    end.

在trace的帮助下,我知道Http_resultStatus 200是可以的。

Mod:myurl line:863 'out_adm(A)=====PASS_THROUGH HTML====> Url' ["http://adm:8080"]
=ERROR REPORT==== 11-Oct-2021::17:55:28.784448 ===
yaws code at appmod:0 crashed or ret bad val:60
Req: {http_request,'GET',{abs_path,"/adm"},{1,1}}

我一点头绪都没有。对我来说,一切都很清楚,很容易,所以这个错误让我很惊讶。问题是什么?我怎么理解这个错误信息?Html有什么问题吗?如果有,是什么?
查看https://github.com/erlyaws/yaws/blob/master/src/yaws_server.erl中的定义对我没有帮助:

handle_out_reply(Reply, LineNo, YawsFile, _UT, ARG) ->
    L =  ?F("yaws code at ~s:~p crashed or "
            "ret bad val:~p ~nReq: ~p",
            [YawsFile, LineNo, Reply, ARG#arg.req]),
    handle_crash(ARG, L).

如何调试?这是docker还是yaws的问题?

k4aesqcs

k4aesqcs1#

发现我的错误:
在我的out_adm函数中不是简单的Html;,而是{html, Html};
但现在我面临另一个问题:请参阅HTML is not applying the CSS when viewed in browser

相关问题