Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Erlang服务器接口的工作示例_Erlang_Cgi_Inets - Fatal编程技术网

Erlang服务器接口的工作示例

Erlang服务器接口的工作示例,erlang,cgi,inets,Erlang,Cgi,Inets,我试图让Erlang的iNet模式esi工作并运行一些功能。到目前为止,我没有成功。是否有人可以发布一个如何运行iNet的简单示例,以便像http:localhost:8099/esi/my_mod:foo这样的url将调用方法my_mod:foo/3 添加:我已使用以下命令启动iNet: inets:start(), inets:start(httpd, [{port, 8099}, {server_name, "localhost"}, {document_root, "."}, {s

我试图让Erlang的iNet模式esi工作并运行一些功能。到目前为止,我没有成功。是否有人可以发布一个如何运行iNet的简单示例,以便像
http:localhost:8099/esi/my_mod:foo
这样的url将调用方法
my_mod:foo/3

添加:我已使用以下命令启动iNet:

inets:start(),
inets:start(httpd, [{port, 8099}, {server_name, "localhost"}, {document_root, "."}, 
  {server_root, "."}, {erl_script_alias, {"/esi", [my_esi, io]}}]).
该模块是:

-module(my_esi).
-export([foo/3]).
foo(Sid, Env, In) -> mod_esi:deliver(Sid, ["bla"]).
但是浏览到
http://localhost:8099/esi/my_esi:foo
导致错误消息。

好的,下面是:

  • inets
    web服务器设置
    {erl\u script\u别名,{/esi“,[my\u mod]}
    ,以便接受该模块
  • 编写
    my_mod
    。比如:

    -module(my_mod).
    -export([foo/3]).
    
    
    foo(SessID, _Env, _Input) ->
      mod_esi:deliver(SessID, ["Data ", <<"as">>, " an iolist"]).
    
    -模块(my_mod)。
    -出口([foo/3])。
    foo(sessiond,_Env,_Input)->
    mod_esi:deliver(sessiond,[“Data”,“一个iolist]”)。
    
  • 确保
    mod_esi
    是名为module:
    {modules,[..,mod_esi,…}}的
    inets
    部分的一部分
  • 这一步非常重要:呼吸3次,背诵神圣的话语“我向你祈祷,伊内茨,你这次会工作。”交叉手指
  • 喝一杯咖啡。茶不行。它必须是咖啡
  • 享受你的网络服务器

  • 我自己解决了这个问题。出于某种原因,超出了我的理解,当我使用配置文件调用Inets时,完全相同的代码工作(Inets/examples/server\u root/conf/8080.conf的修改版本)。我假设示例文件包含iNet所需的属性的完整列表,比我在
    iNet:start(httpd,[…])
    中列出的更完整。如果将来有人遇到iNet问题,我的建议是从示例配置开始。

    为了澄清已经说过的内容,我将给出一个工作示例(从头开始)。这是为了帮助那些从谷歌来到这里的人,主要是因为我就是这样找到它的;)

    首先,创建模块:

    # filename: my_esi.erl
    -module(my_esi).
    -export([foo/3,bar/3]).
    foo(Sid, Env, In) -> mod_esi:deliver(Sid, ["foo"]).
    bar(Sid, Env, In) -> mod_esi:deliver(Sid, ["bar"]).
    
    保存它,然后编译它:

    erlc my_esi.erl
    
    你现在有了我的光束

    然后从bash运行shell

    erl
    
    在外壳类型中,请执行以下操作:

    inets:start().
    {Httpd_State,Httpd_Pid} = inets:start(httpd, [{port, 8099}, {server_name, "localhost"}, {document_root, "."}, {modules,[mod_esi]},{server_root, "."}, {erl_script_alias, {"/esi", [my_esi, io]}}]).
    
    这里的重要部分是:

    {modules,[mod_esi]}
    
    如果需要其他模块,请通过将它们附加到列表中来加载它们

    要澄清如何/为什么:

    首先,我要承认,一开始确实有点奇怪,文档没有我希望的那么有用。然而,我意识到:

    modules()       -> [atom()]
    
    变成:

    {modules, [mod_access, mod_esi, ..., etc.]}
    

    希望它对某人有所帮助:)

    我用不起作用的例子更新了这个问题。我做错了什么?看起来像是你所写内容的简单版本。