Erlang服务器接口的工作示例
我试图让Erlang的iNet模式esi工作并运行一些功能。到目前为止,我没有成功。是否有人可以发布一个如何运行iNet的简单示例,以便像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
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
部分的一部分
我自己解决了这个问题。出于某种原因,超出了我的理解,当我使用配置文件调用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.]}
希望它对某人有所帮助:)我用不起作用的例子更新了这个问题。我做错了什么?看起来像是你所写内容的简单版本。