Update:
I needed to put a longer timeout in the call to
Rinda::RingFinger#lookup_ring_any.
After using 30 seconds instead of the default 5 seconds, the error
went away.
pat

On Oct 1, 3:18 pm, koicat <[email protected]> wrote:
> Am running a rails application which launches a series of relatively
> long running scripts using delayed_job  and Rinda to farm out the
> work.   At the moment am using a single delayed_job process (rake
> jobs:work, as am stuck on Windows), a ring server process (started
> with RingyDingy), and a single service process ( pretty ordinary )
>
> These are running in the same machine (though we have plans to
> actually have a ‘farm’ of services on more than one machine).
>
> When  we start a run of more than a few scripts ( longest run is about
> 48 scripts, run time up to 7 hours total)  we occasionally see a
> script fail because it can’t find the ring server (RingNotFound) error
> even though the ring server process is running fine.   The next script
> almost always finds the server and runs ok.
>
> Anyone have any ideas?
>
> Code follows
>
> worker excerpt: (where the error occurs)
>   ###################################
>   def run_distributed
>     output = 'urk'
>     @aFullScript.distrib = true
>
> #      DRb.start_service( nil, @aFullScript )
>     DRb.start_service
>
>     ring_finger = Rinda::RingFinger.new('127.0.0.1')
>     sleep 2
>     ring_server = ring_finger.lookup_ring_any
>     sleep 2
>     log_message(1, "ring server:\n#{ring_server.inspect}", __LINE__)
>
>     service = ring_server.take([:name, :ScriptServer2, nil, nil])
>     log_message(1, "service:\n#{service.inspect}", __LINE__)
>
>     server = service[2]
>     server.fullScript = @aFullScript
>     log_message(1, "server:\n#{server.inspect}", __LINE__)
>
>     begin
>       output = server.run
>       ring_server.write([:name, service[1], service[2], service[3]])
>     rescue
>       log_message(3, "In ScriptWorker2.perform #{$!}
> \[email protected]_yaml}", __LINE__)
>     ensure
>       return output
>     end
>   end
>
> ring_server.rb:
> Dir.chdir('../vendor/gems/RingyDingy-1.2.1/lib')
> require 'rubygems'
> require 'ringy_dingy/ring_server'
>
> puts "ring server - waftt #{$$}"
> rs = RingyDingy::RingServer.new(:Verbose => true)
> rs.run
>
> script_server2.rb:
> require 'rubygems'
> require 'rinda/ring'
> require 'drb'
>
> class ScriptServer2
>   include DRbUndumped
>
>   attr_accessor :server_output
>   attr_accessor :fullScript
>
>   def initialize
>     @fullScript = ''
>     @server_output = ''
>   end
>
>   def run
>     @server_output = ''
>     puts "****** Running #[email protected]} #{Time.now.strftime("%Y
> %m%d %H%M%S")} (#...@fullscript})"
>     @server_output << @fullScript.doit
> #    puts @server_output
>     puts "****** Completed #[email protected]}
> #{Time.now.strftime("%Y%m%d %H%M%S")} (#...@fullscript})"
>     @server_output
>   end
>
> end
>
> DRb.start_service #( nil, ScriptServer2.new )
> myPid = Process.pid.to_s
> puts "ScriptServer2 #{myPid}"
>
> finger = Rinda::RingFinger.new('127.0.0.1')
> ring_server = finger.lookup_ring_any
> ring_server.write([:name,
>                    :ScriptServer2,
>                    ScriptServer2.new,
>                    "ScriptServer2 #{myPid}"],
>                   Rinda::SimpleRenewer.new)
>
> liveTS  = Time.now.strftime("%Y%m%d%H%M%S")
> puts "going live... #{liveTS}"
> DRb.thread.join
>
> The command file that starts everything up:
> start "rails server - waftt" /i /min ruby script/server -p 9191 start
> sleep 6
> start "ring server - waftt" /i /min ruby script/ring_server.rb
> sleep 10
> start "script server 1 - waftt" /i /min ruby lib/script_server2.rb
> start "rake jobs:work 1 - waftt" /i /min rake jobs:work
>
> Thanks!
> pat

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to