首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调试Erlang Webmachine资源函数

调试Erlang Webmachine资源函数
EN

Stack Overflow用户
提问于 2011-08-04 23:28:47
回答 1查看 926关注 0票数 3

我正在尝试学习如何编写Erlang Webmachine资源。一个资源抛出一个错误,但我无法追踪到它。崩溃报告中的错误消息没有提供足够的信息。

有没有办法在Erlang shell中测试这些函数?

资源中的大多数函数都需要请求和上下文参数。但我不知道如何在浏览器中模拟这些参数。

下面是示例代码。

谢谢,

LRP

示例代码:

我特别考虑的函数如下:

代码语言:javascript
复制
content_types_provided(RD, Ctx) ->
   Path = wrq:disp_path(RD),
   {[{webmachine_util:guess_mime(Path), generate_body}],
   RD, Ctx}.

但是我现在的bug是在init函数中。

这行得通..。

派单规则:

代码语言:javascript
复制
{["blip"], zzz_resource, []}.

Init:

代码语言:javascript
复制
init([]) -> {ok, undefined}.

to_html(ReqData, State) ->
    % {"<html><bodoy>Hello, new world</body></html>", ReqData, State}.
        {test:test(), ReqData, State}.

但这会抛出一个错误:

派单:

代码语言:javascript
复制
{["static"], static_resource,[]}.

Init:

代码语言:javascript
复制
init(_) ->
   DocRoot =
       case init:get_argument(doc_root) of
          {ok, [[DR]]} -> DR;
           error -> "doc_root path error"
       end,
   {ok, #ctx{docroot=DocRoot}}.

=ERROR REPORT==== 4-Aug-2011::10:54:56 ===
webmachine error: path="/static"
{error,function_clause,
   [{filename,join,[[]]},
    {static_resource,resource_exists,2},
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-05 02:59:12

这个答案有很多层次,这取决于你想看到的是什么,以及你想去的兔子洞有多深。

让我们从简单的东西开始:

您得到的错误告诉我,对static_resource:resource_exists/2的调用导致了对filename:join/1的调用失败,因为它被传递了[]作为参数。这应该可以帮助您追踪问题。

推荐阅读:errors-and-exceptions

在任何语言中跟踪错误的一种粗略的方法就是在关键位置添加打印语句。在这种情况下,您可以使用io:format/2erlang:display/1在控制台上显示您想要的任何内容。例如:

代码语言:javascript
复制
...
erlang:display("I'm inside resource_exists!"),
StuffToJoin = ["foo", "bar"],
erlang:display(StuffToJoin),
filename:join(StuffToJoin),
...

只需重新加载页面,您应该会在控制台中看到打印出来的值(假设在重新加载过程中调用了相应的函数)。

如果您想手动测试资源(就像在单元测试中一样),您可以执行类似以下操作:

代码语言:javascript
复制
Headers = [{"Host", "mydomain.com"}, {"user-agent", "Firefox"}],
Context = [],
Path = "/static",
ReqData = wrq:create('GET', {1,1}, Path, mochiweb_headers:from_list(Headers)),
static_resource:resource_exists(ReqData, Context)

如果您想深入了解如何调试webmachine,可以阅读this。你可以通过上面的方法走得很远,但是如果你需要查看决策图,做一个完整的跟踪可能会很有帮助。

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

https://stackoverflow.com/questions/6944204

复制
相关文章

相似问题

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