Ok, I got it. But I had to make a little hack on "retrieve_connection" to 
achieve this:

module ActiveRecord
  module ConnectionAdapters
    class ConnectionHandler
      def retrieve_connection(klass) #:nodoc:
        pool = retrieve_connection_pool(klass)
        raise ConnectionNotEstablished, "No connection pool for #{klass}" 
unless pool
        conn = Thread.current["connection"] || pool.connection
        raise ConnectionNotEstablished, "No connection for #{klass} in 
connection pool" unless conn
        conn
      end
    end
  end
end

I just modify the "conn = pool.connection" to "conn = 
Thread.current["connection"] || pool.connection". This allows me to define 
the connection using a custom thread variable. With this hack, my code 
looked like this:

# slow query process at background
Thread.new do
  Thread.current["connection"] = ActiveRecord::Base.connection_pool.checkout
()
  100000.times { User.first.update_attributes(some_field: (rand * 100).to_i) 
}
  ActiveRecord::Base.connection_pool.checkin(Thread.current["connection"])
end

# more slow query process
100000.times { User.first.update_attributes(some_field_2: (rand * 100).to_i) 
}

This meets my needs, but I wonder if there isn't a native method to change 
the connection of a thread. The way I've done was so ugly :/

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to rubyonrails-core+unsubscr...@googlegroups.com.
To post to this group, send email to rubyonrails-core@googlegroups.com.
Visit this group at http://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/d/optout.

Reply via email to