Topic: drb problem? ringy-dingy won't answer...

The following code works fine as long as I don't try to run it through
the distributed server.  It doesn't get there...
It runs fine out of delayed_job, runs fine if called directly.
But if 'distrib' is true (the default) it runs right up to the call to
the server and right past it without getting to the server or raising
any errors.

Am using Ruby 1.8.6.26 , Ringy-Dingy 1.2.1, dj 1.8.4.

*********The server:
require 'rinda/ring'
class ScriptServer
  include DRbUndumped
  attr_accessor :result
  def run(fullScript)
    myTS  = Time.now.strftime("%Y%m%d%H%M%S")
    msg = "===> Starting #{scriptname} in run #{scriptrun} on
#{scriptenv} at #{myTS}"
    puts msg
    @result = "***#{scriptname} Launched [#{scriptlaunch}]"
    rslt = fullScript.run
    @result << rslt
    msg = "#{scriptname} Completed [#{Time.now.strftime("%Y%m%d%H%M
%S")}]"
    @result << "***#{msg}"
  rescue
    @result << "#{scriptname} Aborted [#{Time.now.strftime("%Y%m%d%H%M
%S")}] \n #{$!} \n #{caller.to_yaml}"
  ensure
    return @result
  end
end
DRb.start_service
myPid = Process.pid.to_s
puts myPid
ring_server = Rinda::RingFinger.primary
ring_server.write([:name,
                :ScriptServer,
                   ScriptServer.new(),
                   "ScriptServer #{myPid}"],
                   Rinda::SimpleRenewer.new)
DRb.thread.join

******** The worker/client
require 'active_support'
require 'drb'

class ScriptWorker

  attr_accessor :script_id
  attr_accessor :run_id
  attr_accessor :distrib

  def initialize( script_id, run_id, distrib = true )
    self.script_id = script_id
    self.run_id    = run_id
    self.distrib   = distrib
    @myLog = ''
  end

  def perform
    myScript = Script.find(script_id)
# left out setting of variables used below...

    require "#{myRoot}/script/#{myScript.name}"

    fullScript = Object.const_get(myClass).new( myScript, myRun,
runenv, myURI, myRoot )

   if self.distrib
      require 'rinda/ring'
      DRb.start_service
      ring_server = Rinda::RingFinger.primary
      service = ring_server.take([:name, :ScriptServer, nil, nil])
      server = service[2]
      result = server.run(fullScript)
      puts result
   else
      result = fullScript.run
      puts result
   end
    @myLog.close
  end

  def init_my_log( name )
...
  end
end

******** The parent script class
require 'rubygems'
require 'util1'
require 'drb'

class ScriptMain

  currDir = Dir.pwd

  include Util1
  include DRbUndumped

  def initialize( aScript, aRun, runenv, myURI, myRoot )
    @myScript = aScript
    @myId = @myScript.id
    @myName  = File.basename(@myScript.name, "*.rb")
    @usecase = @myName
    @myRun = aRun
    @myRoot = myRoot
    @rootDir = "#{RAILS_ROOT}"
    @launch = aRun.launched
    @runenv = runenv
    @myURI  = myURI
    @runid = aRun.id
    @optionStrg = aRun.options
    @myBrowser = ''
    @myHwnd = 0

  end
end

**********a sample child script class
(Just the run method.  bunch of other methods in full script)

class SearchTest < ScriptMain

  def run( limit = 5.minutes )
    begin
      puts '&*&*&* I am here *&*&*&'
      @runenv = 'WEB'
      open_log(@myName, @rootDir, @myRoot, @launch, @start,
               @myId, @runenv, @usecase, @runid, @optionStrg )

      mark_testlevel('Test Parent', 7) # Module
      mark_testlevel('Test Child', 6) # SubModule

      @myBrowser = Watir::IE.new_process
      @myHwnd    = @myBrowser.hwnd
      lookup('Google')
      emaillogin(@myBrowser, @service, @username, @password)
      logout(@myBrowser)

    rescue
      log_message(FATAL, "(#{__LINE__})  #{$!}", @@fail)
      raise
    ensure
      create_flag_file(Time.new.to_f.to_s, 'parse' ) unless @runid ==
'99999'
      close_log(@myName, __LINE__)
    end
  end #def


end

Last edited by pmneve (2010-07-02 13:15:13)

Re: drb problem? ringy-dingy won't answer...

Your post appears to be truncated. Can you edit it or repost please?

Re: drb problem? ringy-dingy won't answer...

Thanks!   Edited and appears complete now