This is a strange one - then again It's about 11:20PM so everything is
looking strange.
I'm finding that method calls on a dRuby object (running on a Windows
machine - calling from a Linux machine in this case) will work just fine
unless they're inside a new thread.
Here's the server code (running on the WindowsNT box):
######server code #############
require 'drb'
class TestServer
def warpver
"warp 8.8.8"
end
def osver
`uname -r`
end
def pwd
Dir.pwd
end
def runit(command)
eval(command)
end
def eval_it(command)
puts "in TestServer::eval_it(#{command})"
end
end
puts "starting server"
aServerObj = TestServer.new
DRb.start_service('druby://localhost:9000', aServerObj)
DRb.thread.join
####end of server code #####################
Here's the client code (running on a Linux box):
#########client#################
require 'drb'
machine = "calvinnt"
command = "this is the command"
DRb.start_service()
drbObj = DRbObject.new(nil, "druby://#{machine}:9000")
#thread = Thread.start do
drbObj.eval_it(command)
#end #thread
###########end of client code ############
All pretty simple (I've cut out all the extra stuff ). It works fine
unless I uncomment the Thread code in the client, like:
require 'drb'
machine = "calvinnt"
command = "this is the command"
DRb.start_service()
drbObj = DRbObject.new(nil, "druby://#{machine}:9000")
thread = Thread.start do
drbObj.eval_it(command)
end #thread
If I run the threaded client, and this is what seems really strange, druby
reports a bunch of exceptions on the SERVER side - something about bad
headers. Why would the server side even 'care' that the call came from a
different thread on the client?
The other data point here is that it seems to work OK if both client and
server are running on Linux boxes. Note: I've installed Ruby 1.6.2 on
both my Linux boxen and my Windows boxen in the last two days - they seem
to all have the same drb version (if they didn't it would complain even if
I left the threading stuff out - drb versions have to match and I believe
they are all at 1.3 now.
Strange question (and please remember it's late): is it possible that if
you run the method call in a seperate thread on the client side that drb
trys to start another thread on the server side (no, that's too bizarre,
please tell me that's too bizarre)
Phil