Awesome. Thanks a bunch.

I'm guessing this has come up before—and it's more of a Rails question than 
a Sequel question at this point—but is there a good spot in Rails to put 
the disconnect? I had read in another thread on this board that doing it 
after the models had loaded made sense, and it does, but do you know of a 
spot in Rails that executes automatically AFTER eager loading of classes 
occurs? That seems like the ideal place to do a disconnect.

On Thursday, October 9, 2014 6:24:52 PM UTC-7, Jeremy Evans wrote:
>
> On Thursday, October 9, 2014 4:27:54 PM UTC-7, binarypaladin wrote:
>>
>> We recently removed ActiveRecord from a Rails project in favor of Sequel 
>> (thank goodness). However, I started noticing some intermittent errors in 
>> our staging environment and am seeing this error in the logs with some 
>> regularity:
>>
>> Sequel::DatabaseDisconnectError (PG::ConnectionBad: PQconsumeInput() ):
>>
>> We weren't seeing these in AR which leads me to believe it was either 
>> silently retrying or something in the way Sequel's connection pool is 
>> configured needs to change. I'm just not even sure where to begin since 
>> I've never seen this error before.
>>
>> I'm not seeing this at all on our local development machines which, in 
>> all honesty, are seeing MORE traffic. We have Sidekiq running in both 
>> instances which I think might be exhausting the connections? I dunno 
>> though. Any ideas would be appreciated.
>>
>
> By design Sequel does not automatically retry queries on connection 
> errors, as it isn't safe to do in the general case.  You can't possibly 
> know if the disconnect occurred before or after the query took effect.
>
> You mentioned that you were using Passenger, so assuming you are 
> preloading your application (the default in passenger I believe), you must 
> call Database#disconnect after loading your application.  Otherwise, the 
> connection used when loading the app will be shared by the workers, which 
> can cause the disconnect errors you are seeing.  Note that the same type of 
> issue affects ActiveRecord, but Passenger automatically disconnects the 
> ActiveRecord connection, which is why you wouldn't see this when running 
> ActiveRecord.  So that's the first thing I would check.
>
> Assuming that that doesn't fix it, you can use the connection_validator 
> extension to validate connections before use.  You can also use 
> Database#transaction :retry_on => Sequel::DatabaseDisconnectError, to 
> automatically retry transactions, but you must be sure the entire 
> transaction block is idempotent when doing so.
>
> Thanks,
> Jeremy
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sequel-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sequel-talk.
For more options, visit https://groups.google.com/d/optout.

Reply via email to