SQLRelay adapter for Rails?

I would like to use SQLRelay for database connection pooling and query- based routing with a Rails application that I am just about done with. It is my first Rails project, and I thought it might be wise to get some feedback on this before I get too far in coding it.

From what I can tell, I am going to have to write a connection adapter

for ActiveRecord if I want to use SQLRelay (http:// sqlrelay.sourceforge.net/) with Rails. While I think this could be a cool, fun and rewarding project, one that I will certainly be into doing, time is of essence here (when isn't it?).

I was hoping someone on this list could add their two cents. I need something like SQLRelay because the ops department, used to supporting weighty, slow PHP apps, is refusing to put this Rails website out on the Internet without support for DB pooling or at least read + write databases. I'd like the application to respond quickly too, as that will certainly play a large factor in whether or not the company continues with Rails development. I've implemented caching as best as I could, but I do still need to point at different databases, with masters and slaves.

I am currently using acts_as_readonlyable, with some modifications, to support a read-only database for my main database server. Unfortunately, I had to use multiple database servers with this Rails application (a member of my team wrote a plugin to support this along the way), so the implementation of acts_as_readonlyable is less than straight-forward.

Advice is greatly appreciated. Have you written a connection adapter for ActiveRecord? Or, better yet, have you implemented SQLRelay with ActiveRecord/Rails?

Thanks!! Jacqui

Jacqui,

I hope somebody would answer your question about SQLRelay. Meanwhile, I am not sure whether it helps in your situation, but as of 0.0.5, ActsAsReadonlyable supports multiple slaves (picked at random for every find). Just download the latest version from rubyforge and you can use it as:

class Fruit < ActiveRecord::Base   acts_as_readonlyable [:first_read_only, :second_read_only] end

Regards, Val

Thanks! That actually might help me. The problem I ran into with acts_as_readonlyable was telling it to use different read_only databases for different write databases. Like so:

development:   adapter: mysql   database: my_development   username: root   password:   host:   encoding: utf8

  read_only:     adapter: mysql     database: my_development_slave     username: root     password:     host:     encoding: utf8

cms_development:   adapter: mysql   database: my_cms_development   username: root   password:   host:   encoding: utf8

  cms_read_only:     adapter: mysql     database: my_cms_development_slave     username: root     password:     host:     encoding: utf8

acts_as_readonlyable didn't seem to work when some models had:

acts_as_readonlyable :read_only

and others had

acts_as_readonlyable :cms_read_only

The erroneous behavior I saw when I had two different read-only db servers defined with different names was that the read only db servers never got hit; all requests went to the write/master.

I'll try adding multiple read-only databases for the same master, though, in an array. That is useful and will make things better on my project - thanks!

- jacqui