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

K

koicat

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,962
Messages
2,570,134
Members
46,690
Latest member
MacGyver

Latest Threads

Top