On Fri, Apr 16, 2010 at 1:48 PM, Jeremy Evans <[email protected]> wrote:
> On Apr 16, 1:09 pm, Brian Takita <[email protected]> wrote:
>> Yeah, I'll have to see what the implications are.
>> The major problem I'm having right now is Friendly does not play nice
>> with Rails transactional fixtures, and test speed is important to me
>> (and my coworkers).
>> I don't want to start a debate over whether fixtures are good or not.
>> For us, they are good.
>
> I think you'll have problems in most cases.  Quite a few Sequel
> adapters modify the underlying connection objects in order to produce
> desired behavior, and ActiveRecord's connection is not going to be
> completely compatible in those cases.
>
> Also, I'm not sure how using the same connection for Sequel and AR
> will solve any problems in terms of test speed or transactions.  Does
> Friendly not work because it uses Sequel and Rails' transactional
> fixtures only work with the ActiveRecord connection?  Because fixing
> that is as simple as modifying the test runner (e.g.
> http://github.com/jeremyevans/fixture_dependencies/blob/master/lib/fixture_dependencies/test_unit/sequel.rb).
I just realized that the bug lied elsewhere. I changed the type of the
foreign key from integer to string and did not update the Friendly
document. So I misdiagnosed it as a transaction issue.

The only time this would not work is when doing joins from AR to/from
Friendly. I don't intend to do this, so it should not be necessary to
share the object.

Anyways, I made something slightly more robust, as long as the app is
single threaded. However, I'm going to delete it now, since it is not
necessary. :-)

      Friendly.db.meta_def(:connect) do
        unless ActiveRecord::Base.connection.active?
          ActiveRecord::Base.reconnect!
        end
        ActiveRecord::Base.connection.raw_connection
      end

>
>> > Honestly, just use separate connections for Sequel and AR.  You'll
>> > have fewer problems that way.
>>
>> Another reason for this is connection management. We do quite a bit of
>> forking (Nginx Passenger and forked workers). It would be preferable
>> to manage only one connection, or object.
>> I suppose some sort of connection manager object could be set up which
>> integrates with Sequel's connection (and pooling?) and ActiveRecord,
>> however just using the same object seems like the simplest thing for
>> us at this point.
>
> For anything with forked workers, you should be disconnecting all
> database connections before the fork, and reconnecting after.  Doing
> this for both ActiveRecord and Sequel is many times simpler than
> trying to make them both use the same connection object and just
> trying to disconnect that connection object.
That makes sense. I can see how there could be issues, however in a
single threaded environment,
>
>> I'll keep you posted on how it turns out.
>
> Please do.
>
> An alternative solution would be to use Sequel::Model instead of
> ActiveRecord.  Then you don't have to worry about sharing connections,
> plus you get all of the benefits Sequel::Model brings over
> ActiveRecord.  Of course, if you have a lot of existing ActiveRecord
> code, I can see where this may be an issue.
Interesting. I'll take a look at Sequel::Model.
>
> Jeremy
Thanks for putting up with my fumbling,
- Brian
>
> --
> You received this message because you are subscribed to the Google Groups 
> "sequel-talk" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/sequel-talk?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sequel-talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sequel-talk?hl=en.

Reply via email to