ActiveRecord Store of sessions in a separate database

I’d like to be able to save sessions in a separate database.

I created the following model below in session.rb:

class Session < ActiveRecord::Base
self.abstract_class = true
establish_connection :userdb
end

I seem to be missing something however, as the server still tries to
find
the sessions table in the default database and not in the one I label as
:userdb in my database.yml. What may that be?

Thanks in advance,

-Al

Hi,

Al wrote:

class Session < ActiveRecord::Base
self.abstract_class = true
establish_connection :userdb
end

I seem to be missing something however, as the server still tries to
find
the sessions table in the default database and not in the one I label as
:userdb in my database.yml. What may that be?

According to

http://api.rubyonrails.com/classes/ActiveRecord/Base.html#M001075

you must write something like this:

establish_connection(
:adapter => “mysql”,
:host => “localhost”,
:username => “myuser”,
:password => “mypass”,
:database => “somedatabase”)

A symbol is not enough.

Lutz

Actually, connecting to this database works from the console. That is,
doing a simple Session.find(1) will display the right results. However,
rails isn’t even referring to this model to know which database to
connect
to.

So, what I think is lacking is something that connects rails’ use of the
actual session to the Session model that I created.

Using a symbol works if the connection information is in database.yml.
You supply the name of the connection only, allowing you to keep all
database connections defined in one locaation.

Lutz H. wrote:

find
establish_connection(
:adapter => “mysql”,
:host => “localhost”,
:username => “myuser”,
:password => “mypass”,
:database => “somedatabase”)

A symbol is not enough.

Lutz


Sincerely,

William P.

http://www.billpratt.net
[email protected]

That didn’t seem to work as I got a

load_missing_constant’: uninitialized constant Session

when ran server.

I believe you need the following in your environment.rb

config.action_controller.session_store = Session

You have to supply the name of your class that you wish to use. Hope
this helps ya.

Al wrote:

find the sessions table in the default database and not in the one I
label as :userdb in my database.yml. What may that be?

Thanks in advance,

-Al


Sincerely,

William P.

you will have to require it first since rails will not have loaded your
class yet. just use a require above that line like:’

require File.join(File.dirname(FILE), ‘app/models/session.rb’)

Al wrote:

> I created the following model below in session.rb:
> Thanks in advance,


Sincerely,

William P.

Resolved this after updating my gems, and then running script/about and
I
saw that it wasn’t loading the file path correctly.
So, my new problem is when reading session.rb, it says “uninitialized
constant ActiveRecord”.

Odd… After adding that require line, I get the following error when
launching script/server:

=> Booting Mongrel (use ‘script/server webrick’ to force WEBrick)
=> Rails application starting on http://0.0.0.0:3412
=> Call with -d to detach
=> Ctrl-C to shutdown server
** Starting Mongrel listening at 0.0.0.0:3412
** Starting Rails with development environment…
Exiting
/usr/local/lib/ruby/gems/1.8/gems/rails-1.2.3/lib/commands/servers/mongrel.rb:15:
warning: already initialized constant OPTIONS
/usr/local/lib/ruby/gems/1.8/gems/rails-1.2.3/lib/commands/servers/mongrel.rb:18:
undefined method options' for []:Array (NoMethodError) from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:32:in gem_original_require’
from
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:32:in
require' from /usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:495:in require’
from
/usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:342:in
new_constants_in' from /usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:495:in require’
from /usr/local/lib/ruby/gems/1.8/gems/rails-1.2.3
/lib/commands/server.rb:39
from
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
gem_original_require' from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in require’
from ./script/server:3