Is there a way to create an object that is a singleton (one instance
per user session) and is kept as long as the user session exists? The
object handles a connection to a remote server that is very heavy to
establish so I would like to reuse the same object in following
requests.
I have tried class variables and global variables but both are
discarded at the request’s end.
Is there a way to create an object that is a singleton (one instance
per user session) and is kept as long as the user session exists? The
object handles a connection to a remote server that is very heavy to
establish so I would like to reuse the same object in following
requests.
You have answered your own question, put it in the session. If it is
a large object then put it in the db and reference it from the
session.
Hi Colin and thanks for the suggestion. But the problem is more
intricate than this, I am afraid. The reason I want to keep the object
is that it connects via sockets to a pool of servers (at least 4 of
them). When the object is marshaled, either for storage in the session
or in the db these connections are lost. Maybe there is another
solution but as I understand it the only way to keep these connections
is to keep the object itself, not a serialized copy.
Hi Colin and thanks for the suggestion. But the problem is more
intricate than this, I am afraid. The reason I want to keep the object
is that it connects via sockets to a pool of servers (at least 4 of
them). When the object is marshaled, either for storage in the session
or in the db these connections are lost. Maybe there is another
solution but as I understand it the only way to keep these connections
is to keep the object itself, not a serialized copy.
I suspect class variables etc are only vanishing because you are in
development mode. In production mode they will persist.
Excellent, you are right. I thought I tried that but I have tried many
combinations so I must have done it for something that was not
persistent in itself. @@variable worked when in production mode. You
made me a very happy camper.
As a matter of interest how are you deciding when to release the
connection?
Also don’t forget that if you ever went to multiple servers to serve
your app that successive requests from a user may not go to the same
server.
Excellent, you are right. I thought I tried that but I have tried many
combinations so I must have done it for something that was not
persistent in itself. @@variable worked when in production mode. You
made me a very happy camper.
Thanks.
Erik
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.