class SafeFork
Public Class Methods
fork() { || ... }
click to toggle source
# File lib/hydra/safe_fork.rb, line 2 def self.fork begin # remove our connection so it doesn't get cloned connection = ActiveRecord::Base.remove_connection if defined?(ActiveRecord) # fork a process child = Process.fork do begin # create a new connection and perform the action begin ActiveRecord::Base.establish_connection((connection || {}).merge({:allow_concurrency => true})) if defined?(ActiveRecord) rescue ActiveRecord::AdapterNotSpecified # AR was defined but we didn't have a connection end yield ensure # make sure we remove the connection before we're done ActiveRecord::Base.remove_connection if defined?(ActiveRecord) end end ensure # make sure we re-establish the connection before returning to the main instance begin ActiveRecord::Base.establish_connection((connection || {}).merge({:allow_concurrency => true})) if defined?(ActiveRecord) rescue ActiveRecord::AdapterNotSpecified # AR was defined but we didn't have a connection end end return child end