当前位置: 首页 > 知识库问答 >
问题:

[Cowboy Erlang]:使用提供的Cowboy示例web\u服务器时,pin指向localhost:8080时出错

陆寒
2023-03-14

我正在尝试github存储库提供的牛仔示例:

https://github.com/ninenines/cowboy/tree/master/examples/web_server

我使用erlang成功构建了这个版本。mk并运行以下命令,该命令将在我的linux终端中打开Erlang shell:

$ ./_rel/web_server_example/bin/web_server_example console

但当我打开<代码>http://localhost:8080在我的web浏览器中,我得到以下错误报告:

=ERROR REPORT====26-Nov-2014::14:33:48 ===过程中的错误

=ERROR REPORT====26-Nov-2014::14:33:48 ===Ranch listener超文本传输协议连接进程开始于cowboy_protocol:start_link/4 at

这是第454行附近的“src/cowboy\u protocol.erl”:

-spec next_request(cowboy_req:req(), #state{}, any()) -> ok.
next_request(Req, State=#state{req_keepalive=Keepalive, timeout=Timeout},
        HandlerRes) ->
    cowboy_req:ensure_response(Req, 204),
    %% If we are going to close the connection,
    %% we do not want to attempt to skip the body.
    case cowboy_req:get(connection, Req) of
        close ->
            terminate(State);
        _ ->
            %% Skip the body if it is reasonably sized. Close otherwise.
            Buffer = case cowboy_req:body(Req) of
                {ok, _, Req2} -> cowboy_req:get(buffer, Req2);
                _ -> close
            end,
            %% Flush the resp_sent message before moving on.
            if HandlerRes =:= ok, Buffer =/= close ->
                    receive {cowboy_req, resp_sent} -> ok after 0 -> ok end,
                    ?MODULE:parse_request(Buffer,
                        State#state{req_keepalive=Keepalive + 1,
                        until=until(Timeout)}, 0);
                true ->
                    terminate(State)
            end
    end.

webb_server_app.erl文件:

%% Feel free to use, reuse and abuse the code in this file.

%% @private
-module(web_server_app).
-behaviour(application).

%% API.
-export([start/2]).
-export([stop/1]).

%% API.

start(_Type, _Args) ->
    Dispatch = cowboy_router:compile([
        {'_', [
            {"/[...]", cowboy_static, {priv_dir, web_server, "", [
                {mimetypes, cow_mimetypes, all},
                {dir_handler, directory_handler}
            ]}}
        ]}
    ]),
    {ok, _} = cowboy:start_http(http, 100, [{port, 8080}], [
        {env, [{dispatch, Dispatch}]},
        {middlewares, [cowboy_router, directory_lister, cowboy_handler]}
    ]),
    web_server_sup:start_link().

stop(_State) ->
    ok.

谁有什么建议,到底是什么导致了这个问题,以及如何解决它?谢谢。

编辑:

我可以确认,在我的情况下,故障出现在Erlang OTP版本R16B02中。更改为最新的Erlang版本(17.3),并解决配置阶段出现的缺失文件依赖关系(使用以下链接中的解决方案):

https://sites.google.com/site/comptekkia/erlang/how-to-install-erlang-on-ubuntu-10-10

已解决问题。web\u服务器示例现在运行正常。

共有1个答案

贾实
2023-03-14

错误显示的是function子句,因此cowboy\u req:sure\u response/2的参数肯定是错误的。确实如此,因为第一个参数是{ok,Request},而不是Request。您必须回溯哪个函数调用了参数不正确的next\u request/3,因为它显然应该在没有确定的情况下调用。

也许在最后的某个地方,你会发现类似的东西:

Req = some_function(...)

您需要将其更改为:

{ok, Req} = some_function(...)

祝你好运,猎虫快乐:D

更新:我刚刚克隆了回购协议,它对我来说很好。我得到了目录列表,所以它不是cowboy中的bug,而是用户代码中的某个地方。

 类似资料:
  • 问题内容: 我正在使用predis并订阅了频道并进行监听,它抛出错误并死了,如下图所示,过了60秒后,肯定不是我的Web服务器错误或超时。 目前正在讨论的一个类似的问题在这里。无法得到太多。 我尝试将predis conf文件中的connection_timeout设置为0,但没有太大帮助。 另外,如果我继续使用(向其发送数据并进行处理)该工作程序,则不会出现任何错误。因此,它可能在某处超时,并且

  • 我有一个有角度的Spring靴项目。Angular项目包含向端口8080上运行的Spring Boot应用程序发出Http请求的服务。奇怪的是,我的至少一个服务正在对localhost:4200而不是localhost:8080进行Http调用,尽管我认为我已经设置了正确的配置。 角度服务: proxy.conf.json项目根目录下的文件: 我用以下命令启动Angular服务器:ng serve

  • 使用 PHP-FPM 有多种方式来配置一个 web 服务器以提供 PHP 服务。传统(并且糟糕的)的方式是使用 Apache 的 mod_php。Mod_php将PHP 绑定到 Apache 自身,但是 Apache 对于该模块功能的管理工作非常糟糕。一旦遇到较大的流量, 就会遭受严重的内存问题。 后来两个新的可选项很快流行起来:mod_fastcgi 和 mod_fcgid。 两者均保持一定数量

  • 调用web服务操作时返回的错误是:org.apache.axis2.axisfault:Transport.error:302 error:Redirect at org.apache.axis2.Transport.http.httpsender.handleresponse(httpsender.java:310)at org.apache.axis2.Transport.http.https

  • 问题内容: 我正在探索Go的深度,并且我一直在尝试编写一个简单的Web应用程序来围绕所有内容。我正在尝试服务React.js应用程序。 下面是Go服务器的代码。我有默认的服务路线,效果很好。我正在努力允许将静态文件提供给该索引文件。尽管我需要静态提供JavaScript / CSS / Media文件,但我允许React App自己进行客户端路由。 例如,我需要能够将文件提供给React应用程序才

  • 问题内容: 我有一个应该将文件发送到Web服务的程序,该程序需要SSL连接。我运行程序如下: 这很好,但是当我将第一行更改为 我收到以下错误: 因此,似乎该问题与我正在使用的JRE有关,但似乎没有意义的是非IBM JRE可以正常工作,而IBM JRE则不能。有什么想法或建议吗? 问题答案: 如果您的非IBM jre是sun,那么它已经附带了SSL类实现。 看来IBM jre根本不包含SSL实现类。