Forum: Ruby on Rails Switching to active_record_store session management errors out

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
10f7e00c1c5c60e2173995eb16f4ffc7?d=identicon&s=25 pepe (Guest)
on 2008-12-25 05:35
(Received via mailing list)
Hello,

Running Ruby 1.8.6 and Rails 2.2.2 against an Oracle XE database
(sigh).

I just upgraded Rails from 1.2.3 to 2.2.2, which made my cookie based
system for storing session information to error out due to the 4Kb
limit. So, I tried to turn on the active_record_store system by un-
commenting out the "config.action_controller.session_store
= :active_record_store" line in environment.rb and then create a db
session (db:sessions:create) and run a rake migration (rake
db:migrate).

Got all that done, which created a table named SESSIONS in the DB.
However I had to tweak the migration code because the table name
generated was singular (SESSION) and Oracle didn't like that name. I
searched the internet and found a sample where the table name was
plural (SESSIONS), so I made the change hoping for the best. Here is
the SQL generated:

CREATE TABLE  "SESSIONS"
   (  "ID" NUMBER(38,0) NOT NULL ENABLE,
  "SESSION_ID" VARCHAR2(255) NOT NULL ENABLE,
  "DATA" CLOB,
  "CREATED_AT" DATE,
  "UPDATED_AT" DATE,
   PRIMARY KEY ("ID") ENABLE
   )
/


CREATE INDEX  "INDEX_SESSIONS_ON_SESSION_ID" ON
"SESSIONS" ("SESSION_ID")
/


CREATE INDEX  "INDEX_SESSIONS_ON_UPDATED_AT" ON
"SESSIONS" ("UPDATED_AT")
/

But now, when I try to start my application, I get an error I've been
unable to solve. This is the error:

/!\ FAILSAFE /!\ Wed Dec 24 22:36:41 -0500 2008
Status: 500 Internal Server Error
"DESC session" failed; does it exist?
(eval):3:in 'describe'
c:/ruby/lib/ruby/gems/1.8./gems/activerecord-oracle-adapter01.0.0.9250/
lib/active_record/connection_adapters/oracle_adapter.rb:334: in
'columns'

And here are the first 2 lines of the method:

        def columns(table_name, name = nil) #:nodoc:
          (owner, table_name) = @connection.describe(table_name)

I believe the problem is in the table name change I made (from
singular to plural). I have looked to see if there was a way in Rails
to override the name of the table that stores session information but
couldn't find any.

I really would appreciate some help on this.

Thanks in advance.

Pepe
10f7e00c1c5c60e2173995eb16f4ffc7?d=identicon&s=25 pepe (Guest)
on 2008-12-25 14:49
(Received via mailing list)
I want to thank whoever sent me the answer below to my e-mail address.
I tried to answer the e-mail but the e-mail server returned the e-mail
saying the address didn't exist.

This did the trick, but it sparkled another question. I tried to dig
through the Rails and Ruby documentations to get to the class where
the 'magic' happens and I am too dense to figure out where it is. I
would appreciate if somebody shed some light on how to get there.

Thanks a lot.

Pepe

    # You may configure the table name, primary key, and data column.
    # For example, at the end of <tt>config/environment.rb</tt>:
    #   CGI::Session::ActiveRecordStore::Session.table_name =
'legacy_session_table'
    #   CGI::Session::ActiveRecordStore::Session.primary_key =
'session_id'
    #   CGI::Session::ActiveRecordStore::Session.data_column_name =
'legacy_session_data'
    # Note that setting the primary key to the +session_id+ frees you
from
    # having a separate +id+ column if you don't want it.  However,
you must
    # set <tt>session.model.id = session.session_id</tt> by hand!  A
before filter
    # on ApplicationController is a good place.


/usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/
session/active_record_store.rb
Eea4c09d117ec6d5627a18b3846afe26?d=identicon&s=25 kfl62 (Guest)
on 2008-12-25 16:18
(Received via mailing list)
"You may configure the table name, primary key, and data column.
For example, at the end of <tt>config/environment.rb</tt>:
   CGI::Session::ActiveRecordStore::Session.table_name =
'legacy_session_table'
   CGI::Session::ActiveRecordStore::Session.primary_key = 'session_id'
   CGI::Session::ActiveRecordStore::Session.data_column_name =
'legacy_session_data'
Note that setting the primary key to the +session_id+ frees you from
having a separate +id+ column if you don't want it.  However, you must
<tt>session.model.id = session.session_id</tt> by hand!  A before
filter
on ApplicationController is a good place."

/usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/
session/active_record_store.rb
This topic is locked and can not be replied to.