def fork_it(options)
@@logger.debug "spawn> parent PID = #{Process.pid}"
child = fork do
begin
start = Time.now
@@logger.debug "spawn> child PID = #{Process.pid}"
Process.setpriority(Process::PRIO_PROCESS, 0, options[:nice]) if options[:nice]
Spawn.close_resources
ActiveRecord::Base.spawn_reconnect
yield
rescue => ex
@@logger.error "spawn> Exception in child[#{Process.pid}] - #{ex.class}: #{ex.message}"
ensure
begin
if RAILS_2_2
ActiveRecord::Base.connection_handler.clear_all_connections!
else
ActiveRecord::Base.connection.disconnect!
ActiveRecord::Base.remove_connection
end
ensure
@@logger.info "spawn> child[#{Process.pid}] took #{Time.now - start} sec"
@@logger.flush if @@logger.respond_to?(:flush)
exit!(0)
end
end
end
Process.detach(child)
return SpawnId.new(:fork, child)
end