3

Erlang の Inets mode_esi を動作させ、いくつかの関数を実行しようとしています。だから、これまでのところ、私は成功しませんでした。http:localhost:8099/esi/my_mod:fooのような URLがメソッドを呼び出すように、誰かが Inet を実行する方法の最小限の例を投稿できますか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エラー メッセージが表示されます。

4

3 に答える 3

2

すでに述べたことを明確にするために、(ゼロから)実際の例を示します。これは、主に私がそれを見つけた方法であるため、Googleからここに来た人を助けるためです;)

まず、モジュールを作成します。

# 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 からシェルを実行します。

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

それが誰かを助けることを願っています:)

于 2011-01-20T01:39:07.967 に答える
1

I've solved it myself. For some reason, beyond my understanding, the exact same code worked when I invoked Inets with a configuration file (a modified version of inets/examples/server_root/conf/8080.conf). I suppose that the example file includes a more complete list of properties that Inets required than what I listed in inets:start(httpd, [...]). If anyone encounters Inets problem in the future, my advice is to start with the example configuration.

于 2010-11-28T10:45:29.233 に答える
0

わかりました、ここに行きます:

  1. Web サーバー{erl_script_alias, {"/esi", [my_mod]}}用に設定されているため、モジュールは受け入れられます。inets
  2. 書くmy_mod。何かのようなもの:

    -module(my_mod).
    -export([foo/3]).
    
    
    foo(SessID, _Env, _Input) ->
      mod_esi:deliver(SessID, ["Data ", <<"as">>, " an iolist"]).
    
  3. モジュールと呼ばれるセクションmod_esiの一部であることを確認してください。inets{modules, [.., mod_esi, ..}}
  4. このステップは非常に重要です: 3回呼吸し、神聖な言葉を暗唱します。指を交差させます。
  5. コーヒーを一杯飲みます。お茶はしません。それはコーヒーでなければなりません。
  6. Web サーバーをお楽しみください。
于 2010-11-27T16:14:37.617 に答える