私は Mcollective 2.2.x を使用しており、チュートリアルに従ってエージェントを作成しました。
「hello」という名前のエージェントには「speak」というアクションがあり、「speak」アクション内で、以下のコードを使用して XML-RPC を介して Python メソッドを呼び出します。
Mcollective の Ruby エージェント <--
require "xmlrpc/client"
module MCollective
module Agent
class Hello<RPC::Agent
# Basic system inventory, same as the basic discovery agent
action "speak" do
server = XMLRPC::Client.new('localhost', nil, 8888)
s = server.call('testls', request[:msg])
reply[:resultmsg] = s
end
end
end
end
-->
Python XML-RPC コード:
<--
from SimpleXMLRPCServer import SimpleXMLRPCServer
def testls(msg):
print(msg)
return msg
server = SimpleXMLRPCServer(('localhost',8888))
server.register_function(testls)
try:
server.serve_forever()
finally:
server.server_close()
-->
これが私の問題です。mcollective が実行されている状態で、次のコマンドで hello エージェントを呼び出します。
mco rpc hello speak msg='hello' -v
その後、Mcollective プロセスは「スタック レベルが深すぎます」というエラーでクラッシュし、エラーの場所は「$mcollective_path/lib/mcollective/agents.rb」の 132 行目で、コードは「yield(replies) #This is where everything crashes」です。
しかし、最初にこのコマンドを実行すると:
mco rpc hello speak msg='hello' -v --nr
"(結果を処理せず、一度だけ)
次に mco rpc hello speak msg='hello' -v`
今はすべて問題なく、エラーは発生しません
なぜこれが起こっているのかわからない、この種の私は狂っている
誰かが助けてくれたら感謝します!