Is anyone running Rails 2.x against a MS SQL Server DB?

I am unable to get ActiveRecord session support to work under 2.x
against a SQL Server database. I'm starting to wonder if anyone is
running 2.x against SQL Server?

Is anyone running under the following configuration:

Rails 2.x
SQL Server 2000 DB (using AR adapter in ODBC mode)
AR store for ActionController session store.

I'd like to chat with you if you are.

Thanks,
Wes

hey Wes,
I will be running against a sql server 2000 or 2005, but I am still in
development. So I will keep an eye out for any information that you
find out.

Thanks,

Rob

I develop against MS SQL Server 2000 db's all the time.

My company has a whole bunch of legacy db's that are SQL Server 2000
db's. So far, I have not had a problem with the SQL Server AR
adapter, with FreeTDS, in ODBC mode with Rails 2.x.

But, then again, we don't do database session store. We use the Rails
2.x default cookie based session store. So, you may have uncovered a
bug. However, that seems unlikely. The SQL Server AR adapter was
around before Rails 2.x. And, prior to Rails 2.x, I was using db
session store.

The problems I do run into are not really with AR or SQL Server. But,
rather, I have to deal with a lot of legacy/non-Rails-esque database
designs. Things like non-surrogate PK's, composite PK's, weird FK
relationships, using PK's that contain periods and "@'s" . . . just
about every weird thing you can think of . . . I've come across.

The good thing is that so far, I have been able find workarounds for
all these situations.

If you can be a little bit more specific with you problem, maybe post
some error messages or something, I would be happy to help you out.

I used (don't any more) MS Sql Server using session store.

Double check your table permissions on the SQL Server, maybe something
is funky here.

Try going into the console and "Session.new" set some param and save
it, see if it works.

Try using save! instead of save in the console test to raise an
exception on failed save.

What does your test.log say?

Give us more details :slight_smile:

Mikel

Here is some script/console output. We see that the session is in fact
an ActiveRecord object, hooked up to the sessions table, but that saving
the session appears to do nothing. No data end up in the database, and
notice how session.new_record? is still true after the save.

Thanks,
Wes

C:\eclipse\workspace\eSimplyOnlineRails>ruby script/console
Loading development environment (Rails 2.0.2)

session = CGI::Session::ActiveRecordStore::Session.new

=> #<CGI::Session::ActiveRecordStore::Session id: nil, session_id: nil,
data: ni
l, updated_at: nil>

session.is_a?(ActiveRecord::Base)

=> true

session.class.table_name

=> "sessions"

session.new_record?

=> true

session[:test_key] = 3

=> 3

session.save

=> []

session.save!

=> []

session.new_record?

=> true

session[:test_key]

=> 3

Weird,

What does your test / development log say about these actions?

Mikel

and here are the entries in the development.log file (note that all of
this is output on the instantiation of the session, nothing gets written
to the log after that).

On windows I have sometimes had that the server won't write to the log
file if it gets too full sometimes and definately won't if you have
say another console or server open.

Close all your servers and consoles that could be writing to
development.log. Delete or move the development.log and try again and
see if there is any more output....

Mikel

I'm running 2.x against 2005, and all seems to be working fine. I've
ended up modifying the connection adapter to suit my needs though.

I dont think you can set session in the console you'll need to do it
from a controller i.e.

class TestController < ApplicationController
  def index
    session[:test_key] = 3
    render :text => "setting test key to 3"
  end

  def read
    render :text => session[:test_key]
  end

end

This works as expected. Using the edge sql server adapter.

Luke Pearce wrote:

I'm running 2.x against 2005, and all seems to be working fine. I've
ended up modifying the connection adapter to suit my needs though.

Just to clarify that - In my project I'm using a modified sql server
adapter.

I created a new test project, using rails 2.0.2 and the edge sql
server adapter. I added that controller to get/set the session and it
all worked properly.

Luke,

I see the same results in a fresh project using 2.0.2 and the 1.0 SQL
server adapter.

Thanks for the test code.

I'll post the problem with my other app. when I figure it out.

Wes

My problem appears to be related to the use of the object_transactions
plugin (see: http://code.bitsweat.net/svn/object_transactions/), which
in turn, relies on the transaction-simple gem.

Removing the object-transactions plugin allows my session to save
correctly.

I haven't figured out the exact reason yet, but I will and will post
when I have it.

If anyone understands the guts of the object_transactions plugin and/or
the transaction-simple gem and would like to chime in, I'm all ears.

It's incredibly frustrating to have moved to the object_transactions
plugin as an an effectively mandated part of the upgrade to Rails 2.0,
and then have it totally not work with the ActiveRecord session store.

My faith in being able to upgrade a Rails app. and even hope for plugins
to continue to work is extremely shaken.

Wes

Just one more thing to add some evidence to my claim.

If you install the object_transactions plugin (and by association, the
transaction-simple plugin) into a new Rails app. like the one that
Luke mentioned above, you will see the same behavior - your AR session
store will not be saved to/from anymore.

I am going to start a new post about this potential bug.

Wes

I _think_ the final answer is here:

http://www.ruby-forum.com/topic/146569

Wes