C
Carl Youngblood
I'm using DRb for my CGI session store class, as described on the Ruby
Garden wiki here:
http://www.rubygarden.org/ruby?FCGIRubySessionHandling
I've created the session DRbStore class pretty much exactly as it is
there. Just to be precise, here is my DRbStore class:
------------------------------
require 'cgi/session'
require 'drb'
class CGI
class Session
class DRbStore
DRb.start_service
@@session_data = DRbObject.new(nil, 'druby://localhost:9192')
def initialize(session, option=nil)
@session_id = session.session_id
end
def restore
@h = @@session_data[@session_id] || {}
end
def update
@@session_data[@session_id] = @h
end
def close
end
def delete
@@session_data.delete(@session_id)
end
end
end
end
----------------------
And here is the DRb daemon that the DRbStore class accesses:
-------------------------
# This is a session storage daemon which can be shared by multiple FCGI
# processes. It's just a hash which is enabled for DRb access.
require 'drb'
session_data = Hash.new
DRb.start_service("druby://127.0.0.1:9192", session_data)
DRb.thread.join
--------------------------
And here is how I'm instantiating it:
--------------------------
@sess = CGI::Session.new(@cgi, 'database_manager' => CGI::Session:RbStore)
--------------------------
That seems to succeed just fine, as long as I have the session daemon
running, of course. And then when I try to access a session variable
like this:
somevar = @sess['data']
I get the following error (with stack trace):
....
/usr/local/lib/ruby/1.8/cgi/session.rb:80:in `[]'
/usr/local/lib/ruby/1.8/drb/drb.rb:407:in `method_missing'
/usr/local/lib/ruby/1.8/drb/drb.rb:451:in `open'
/usr/local/lib/ruby/1.8/drb/drb.rb:451:in `new'
/usr/local/lib/ruby/1.8/drb/drb.rb:468:in `initialize'
/usr/local/lib/ruby/1.8/drb/drb.rb:163:in `open'
/usr/local/lib/ruby/1.8/drb/drb.rb:163:in `each'
/usr/local/lib/ruby/1.8/drb/drb.rb:170:in `open'
druby://linux:35269 - #
It's like the daemon is returning an instance of DRbStore, instead of
the hash it is supposed to contain.
Does anybody have any idea of what might be going wrong?
Thanks,
Carl Youngblood
Garden wiki here:
http://www.rubygarden.org/ruby?FCGIRubySessionHandling
I've created the session DRbStore class pretty much exactly as it is
there. Just to be precise, here is my DRbStore class:
------------------------------
require 'cgi/session'
require 'drb'
class CGI
class Session
class DRbStore
DRb.start_service
@@session_data = DRbObject.new(nil, 'druby://localhost:9192')
def initialize(session, option=nil)
@session_id = session.session_id
end
def restore
@h = @@session_data[@session_id] || {}
end
def update
@@session_data[@session_id] = @h
end
def close
end
def delete
@@session_data.delete(@session_id)
end
end
end
end
----------------------
And here is the DRb daemon that the DRbStore class accesses:
-------------------------
# This is a session storage daemon which can be shared by multiple FCGI
# processes. It's just a hash which is enabled for DRb access.
require 'drb'
session_data = Hash.new
DRb.start_service("druby://127.0.0.1:9192", session_data)
DRb.thread.join
--------------------------
And here is how I'm instantiating it:
--------------------------
@sess = CGI::Session.new(@cgi, 'database_manager' => CGI::Session:RbStore)
--------------------------
That seems to succeed just fine, as long as I have the session daemon
running, of course. And then when I try to access a session variable
like this:
somevar = @sess['data']
I get the following error (with stack trace):
....
/usr/local/lib/ruby/1.8/cgi/session.rb:80:in `[]'
/usr/local/lib/ruby/1.8/drb/drb.rb:407:in `method_missing'
/usr/local/lib/ruby/1.8/drb/drb.rb:451:in `open'
/usr/local/lib/ruby/1.8/drb/drb.rb:451:in `new'
/usr/local/lib/ruby/1.8/drb/drb.rb:468:in `initialize'
/usr/local/lib/ruby/1.8/drb/drb.rb:163:in `open'
/usr/local/lib/ruby/1.8/drb/drb.rb:163:in `each'
/usr/local/lib/ruby/1.8/drb/drb.rb:170:in `open'
druby://linux:35269 - #
It's like the daemon is returning an instance of DRbStore, instead of
the hash it is supposed to contain.
Does anybody have any idea of what might be going wrong?
Thanks,
Carl Youngblood