代码之家  ›  专栏  ›  技术社区  ›  Little Bobby Tables

Erlang服务器接口的工作示例

  •  3
  • Little Bobby Tables  · 技术社区  · 14 年前

    我正在尝试使Erlang的inets模式工作并运行一些函数。到目前为止,我没有成功。是否可以发布一个关于如何运行inets的最小示例,以便 http:localhost:8099/esi/my_mod:foo 将调用该方法 my_mod:foo/3 ?

    附加:我用以下命令启动了inets:

    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 导致错误消息。

    3 回复  |  直到 8 年前
        1
  •  1
  •   Little Bobby Tables    14 年前

    我自己解决了。出于某种原因,在我无法理解的情况下,当我使用一个配置文件(一个经过修改的 inets/examples/server_root/conf/8080.conf )我想示例文件包含了一个比我在中列出的更完整的inets所需的属性列表。 inets:start(httpd, [...]) . 如果将来有人遇到inets问题,我的建议是从示例配置开始。

        2
  •  1
  •   aws    14 年前

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

    首先,创建模块:

    # 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
    

    在shell中键入以下内容:

    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.]}
    

    希望它能帮助别人:)

        3
  •  0
  •   I GIVE CRAP ANSWERS    14 年前

    好的,这里是:

    1. 设置 {erl_script_alias, {"/esi", [my_mod]}} 对于 inets Web服务器,因此模块被接受。
    2. my_mod . 比如:

      -module(my_mod).
      -export([foo/3]).
      
      
      foo(SessID, _Env, _Input) ->
        mod_esi:deliver(SessID, ["Data ", <<"as">>, " an iolist"]).
      
    3. 确保 mod_esi 属于 国际标准化组织 称为模块的部分: {modules, [.., mod_esi, ..}}
    4. 这一步非常重要:呼吸3次,背诵圣词“我向你祈祷,伊内茨,你这次会工作”。交叉你的手指。
    5. 喝杯咖啡。茶不行。一定是咖啡。
    6. 享受您的网络服务器。
    推荐文章