erlang - Erlang 服务器接口(interface)的工作示例

标签 erlang cgi inets

我正在尝试让 Erlang 的 Inets mode_esi 工作并运行一些功能。所以,到目前为止,我没有成功。有人可以发布一个关于如何运行 Inets 的最小示例,以便像 http:localhost:8099/esi/my_mod:foo 这样的 url 将调用方法 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 会导致错误消息。

最佳答案

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

首先,创建模块:

# 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

您现在将拥有 my_esi.beam

然后从 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.]}

希望对大家有帮助:)

关于erlang - Erlang 服务器接口(interface)的工作示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4291973/

相关文章:

perl - LDAP 身份验证 CGI

erlang - Elixir - https URL 的问题

erlang - mnesia 表的大小(以 MB 为单位)

erlang - 尾递归 pow Erlang

python - 集成 Erlang 和 python 的最佳方式

ruby-on-rails - HttpPlatformHandler HTTP 错误 502.3 - 网关错误

java - 运行 CGI Java 程序

list - Erlang,列表理解语法

http - Erlang:带有 Inets 的 HTTP 接受 header

http - Erlang:使用 Inets 的 HTTP GET 参数