我有下一个代码
require 'rack/rpc'
class Server < Rack::RPC::Server
def hello_world
"Hello, world!"
end
rpc 'hello_world' => :hello_world
end
server = Server.new
use Rack::RPC::Endpoint, server
run server
脚本名称是server.ru
我正在使用命令
启动服务器thin start -R server.ru
>> Thin web server (v1.3.1 codename Triple Espresso)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:3000, CTRL+C to stop
也是客户端示例
require "xmlrpc/client"
# Make an object to represent the XML-RPC server.
server = XMLRPC::Client.new( "0.0.0.0", "/rpc", 3000)
# Call the remote server and get our result
result = server.call("hello_word")
puts result
下一个命令给我异常
ruby client.rb
client.rb:414:in `call': Method hello_word missing or wrong number of parameters! (XMLRPC::FaultException)
from client.rb:7:in `<main>'
为什么找不到hello_word?谢谢。
答案 0 :(得分:1)
这只是一个错字。您正在呼叫hello_word
而不是hello_world
尝试:
result = server.call("hello_world")
这应该可以解决问题。我不认为您可以使用Rackup文件中的run server
启动服务器。当然,在config.ru中需要run
语句,但运行服务器类的实例是没有意义的,因为它甚至没有call
方法。在实践中,您将在那里安装另一个应用程序,例如:
require 'builder'
require 'rack/rpc'
class Server < Rack::RPC::Server
def hello_world
"Hello, world from RPC Server!"
end
rpc 'hello_world' => :hello_world
end
class MyApplication
def call(env)
[200, {"Content-Type" => "text/plain"}, ["Hello world from MyApplication!"]]
end
end
use Rack::RPC::Endpoint, Server.new
run MyApplication.new
我还需要包含builder
gem以使其生效。