From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on dcvr.yhbt.net X-Spam-Level: * X-Spam-ASN: AS33070 50.56.128.0/17 X-Spam-Status: No, score=1.3 required=3.0 tests=MSGID_FROM_MTA_HEADER, RDNS_NONE shortcircuit=no autolearn=no version=3.3.2 Path: news.gmane.org!not-for-mail From: "Lin Jen-Shin (godfat)" Newsgroups: gmane.comp.lang.ruby.rainbows.general Subject: Re: leakage of sockets or activerecord connections Date: Fri, 23 Aug 2013 06:46:18 +0800 Message-ID: References: <52168D10.8080407@corinlangosch.com> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Trace: ger.gmane.org 1377212924 27243 80.91.229.3 (22 Aug 2013 23:08:44 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 22 Aug 2013 23:08:44 +0000 (UTC) To: "Rainbows! list" Original-X-From: rainbows-talk-bounces-GrnCvJ7WPxnNLxjTenLetw@public.gmane.org Fri Aug 23 01:08:48 2013 Return-path: Envelope-to: gclrrg-rainbows-talk@m.gmane.org X-Original-To: rainbows-talk-GrnCvJ7WPxnNLxjTenLetw@public.gmane.org Delivered-To: rainbows-talk-GrnCvJ7WPxnNLxjTenLetw@public.gmane.org X-Greylist: delayed 1307 seconds by postgrey-1.31 at rubyforge; Thu, 22 Aug 2013 23:08:41 UTC DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=godfat.org; s=google; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :content-type; bh=7OQNH3n4Bsb9G0YanTtp+t8SQLbZpneNznbGKvKv5+o=; b=MJIiw8/E36f7WYMpX2NqBzFpZ7l05MInAq99nsCeI1yJKfjsbdhz2YG/KQ08QFeZHB Cn0TH6tje25aJD3GXifLjRd8SHPSjodjcZf/eFR7Q96amwrR98eMQOSzn51IjR6O04Wc Ee0R4cVfwPYZhtNFMS6thW15tYydjbgaTDidQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:content-type; bh=7OQNH3n4Bsb9G0YanTtp+t8SQLbZpneNznbGKvKv5+o=; b=PwYwx8NSTdp/2+OYaXKPujlIjwzN5hQRm6d6cGSMoHLJ2s+v7puhbgr0Ur3EIC86av 56aQIYgjS3KMAsLC5wpKUObw+2vD8uzNFHLAxaBcOLrtcF4C95MabHg+kAMqB8ULEBOS z06eM8MgfrrUgkGoYXhQqj619xxUyajZKsUJp9+K9z8mMdksKe53RrehrVt9HYxtiyOB 0VYJUeXbslzVNw1/zf5tQWHZhFL3W7JFapcY0fBnXCOpoAVyZEdZH83VFiSBLC01j7v3 oUdOmpccVriltm4ti4DJwgFbBQqi2d/q9EjbD6n8oPM/F4BWvaq3uTMPaa/w42Cx/bqD wPTQ== X-Gm-Message-State: ALoCoQmuBybqc9s1b5UEbJrhQay5JjAaY78gTGp1FQSonT780Zc/ZFORte2Xl+oX5e3zD0ocESVr X-Received: by 10.14.194.9 with SMTP id l9mr386880een.87.1377211609062; Thu, 22 Aug 2013 15:46:49 -0700 (PDT) In-Reply-To: <52168D10.8080407-FIgL9nsKG9THeUWFKdsAYQC/G2K4zDHf@public.gmane.org> X-BeenThere: rainbows-talk-GrnCvJ7WPxnNLxjTenLetw@public.gmane.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: rainbows-talk-bounces-GrnCvJ7WPxnNLxjTenLetw@public.gmane.org Errors-To: rainbows-talk-bounces-GrnCvJ7WPxnNLxjTenLetw@public.gmane.org X-Broken-Reverse-DNS: no host name found for IP address 50.56.192.79 Xref: news.gmane.org gmane.comp.lang.ruby.rainbows.general:516 Archived-At: Received: from [50.56.192.79] (helo=rubyforge.org) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1VCdzj-0007zd-IE for gclrrg-rainbows-talk@m.gmane.org; Fri, 23 Aug 2013 01:08:47 +0200 Received: from localhost.localdomain (localhost [127.0.0.1]) by rubyforge.org (Postfix) with ESMTP id 5AE302E18A; Thu, 22 Aug 2013 23:08:48 +0000 (UTC) Received: from mail-ee0-f43.google.com (mail-ee0-f43.google.com [74.125.83.43]) by rubyforge.org (Postfix) with ESMTP id 381D72E186 for ; Thu, 22 Aug 2013 23:08:41 +0000 (UTC) Received: by mail-ee0-f43.google.com with SMTP id e52so1236673eek.30 for ; Thu, 22 Aug 2013 16:08:39 -0700 (PDT) Received: by 10.223.172.69 with HTTP; Thu, 22 Aug 2013 15:46:18 -0700 (PDT) On Fri, Aug 23, 2013 at 6:13 AM, Corin Langosch wrote: > Hi, > > I wonder if I have to setup and hooks (like in unicorn before_fork etc.)? In > fact I'd expect this happens automatically as the thread exits after the > request is completed? > > Thanks, > Corin No, I think you should probably insert this middleware on top of your app: ActiveRecord::ConnectionAdapters::ConnectionManagement This is actually what Rails did for itself. Here's what it is doing: class ConnectionManagement def initialize(app) @app = app end def call(env) testing = env.key?('rack.test') response = @app.call(env) response[2] = ::Rack::BodyProxy.new(response[2]) do ActiveRecord::Base.clear_active_connections! unless testing end response rescue ActiveRecord::Base.clear_active_connections! unless testing raise end end p.s. By pasting you this, now I understood why Rails works a bit differently with threads in tests. Oh well. Maybe I should patch it. _______________________________________________ Rainbows! mailing list - rainbows-talk-GrnCvJ7WPxnNLxjTenLetw@public.gmane.org http://rubyforge.org/mailman/listinfo/rainbows-talk Do not quote signatures (like this one) or top post when replying