2008/1/30 yangpeng <edge_hh / hotmail.com>:

> I found a strange thing when I include a module to a Drb object.
> I'm confused.
>
> module_a.rb:
>
> require 'drb'
> module TestModule1
>   def sayHello2
>     puts "who am i"
>   end
> end
>
> server.rb:
>
> require 'drb'
> require 'module_a'
>
> class ServerHello
>   include TestModule1
>   def sayHello
>     puts 'I am server'
>   end
> end
>
> DRb.start_service("druby://127.0.0.1:2222", ServerHello.new)
> DRb.thread.join
>
>
> client.rb:
>
> require 'drb'
> require 'module_a'
> include TestModule1
> DRb.start_service
>   info = DRbObject.new(nil, "druby://127.0.0.1:2222")
>   info.sayHello()
>   info.sayHello2
>
> The three files in one path, I run server.rb first, then client.rb.
> The result is
>
> server.rb output:
> I am server
>
> client.rb output:
> who am i
>
> But my expected result is:
>
> server.rb output both "I am server" and "who am i"
>
> the "sayHello2" is executed in local, not remote. (or exactly, it's "client invoke server, server invoke client backly",
> for if we changed "puts "who am i"" to "puts self", the result is "DRbObject")
> If I comments the "include TestModule1" of client.rb, the result is good.
> But this is not I want, for there are many standard code share between server and client.
> It's it a defect or my usage error


Wow, this is surprising. I would really appreciate some enlightenment
by somebody more experienced with DRB, but I would call this a bug.

Daniel Brumbaugh Keeney