1

そこでMochiwebを使ってコメットサーバーを作ってみまし

erlang shell からやれば大丈夫です。

ただし、コマンド ラインから mochiweb を使用して最初のノードを起動しようとすると、次のようになります。

erl -pa ebin edit deps/*/ebin -boot start_sasl -sname n1 -s server +K true -setcookie secret_key -s reloader

そして2つ目はルーター付き:

erl -pa ebin edit deps/*/ebin -boot start_sasl -sname router -setcookie secret_key -eval 'net_adm:ping(n1@localhost), router:start_link().'

ブラウザから mochiweb に接続すると、このエラーが発生します

=CRASH REPORT==== 18-Jul-2012::19:04:45 ===
crasher:
initial call: mochiweb_acceptor:init/3
pid: <0.73.0>
registered_name: []
exception exit: {noproc,
                    {gen_server,call,
                        [undefined,{login,"234567e",<0.73.0>}]}}
  in function  gen_server:call/2
  in call from server_web:loop/2
  in call from mochiweb_http:headers/5
ancestors: [server_web,server_sup,<0.55.0>]
messages: []
links: [<0.57.0>,#Port<0.1406>]
dictionary: [{mochiweb_request_qs,
                  [{"session_id","234567e"},{"obj_id","page"}]},
              {mochiweb_request_path,"/polling"}]
trap_exit: false
status: running
heap_size: 2584
stack_size: 24
reductions: 1516

問題は router.erl の次の文字列にあると思います。

-define(SERVER, global:whereis_name(?MODULE)).

-eval の最初の部分 ( net_adm:ping(n1@localhost) ) がエラーなしで開始され、nodes()にn1@localhostが表示されたためです。. しかし、-eval の 2 番目の部分 ( router:start_link() ) は?MODULEでは使用できませんでした。

この問題を解決するにはどうすればよいですか?

4

1 に答える 1

0

現在のモジュールの名前 (?MODULE はそれに置き換えられます) でグローバルに登録されるはずだったgen_serverがまだ開始されていないようです。global:whereis_name(?MODULE)は、投稿したログに見られるように、この場合未定義の権限を返します。

それを行うはずのコードの部分を見つけ (そのモジュールの ?MODULe および/または gen_server:start_link を grep して)、それが最初のノードで実行されたことを確認します。

于 2012-11-01T00:08:22.887 に答える