Let me start by stating the fact that I consider myself a ruby / rails
novice (above newb, just enought to be dangerous, perhaps … )
I have an issue that relates to the ruby-openx gem, which allows ruby
to talk to an OpenX ad-server via XMLRPC, However, I think my problem
is kind of a more basic problem related to Rails, but I am sure it is
also probably due to the way that certain things are implemented in
the gem, so I’m hopeful I can get some basic guidance here on a
problem that has me stumped.
OpenX::Services::Base has a section of code that the other modules /
classes in the openx gem use when they extend this base class to
retrieve the connection to the OpenX server that looks like this:
@@connection = nil
…
def connection= c
@@connection = c
end
def connection
unless @@connection and @@connection.id
@@connection = Session.new(configuration[‘url’])
@@connection.create( configuration[‘username’],
configuration[‘password’]
)
end
@@connection
end
The connection is saved as a class variable, and evidently in Rails,
at least in production mode or when config.cache_classes = true,
classes appear to persist past an initial request so they don’t have
to be reloaded on every request.
The OpenX XMLRPC API expects authenticated sessions to pass back a
session id that is retrieved when you successfully login via the
XMLRPC API. The OpenX::Services::Session class handles this just fine.
However, what ends up happening is that the session times out due to
lack of activity, and the XMLRPC API does not provide a way to tell if
a session is expired or not, so it typically causes 500 internal
server errors in the Rails app that’s trying to communicate with
OpenX.
What I would like to do is basically have a private copy of the openx
classes that exists only during a rails request and do not persist
past the end of the request, independent of the config.cache_classes
setting. I believe this would solve the problem well enough for me to
be able to use as a work-around.
Is it possible to do in Rails what I am asking? I think the reason
this is not an issue with the library as written is that it was not
written with Rails usage in mind, but for usage with either a cron job
or a CLI ruby script instead; however, I have a need for it to operate
properly in a Rails environment.
I’m not keen on either re-writing the gem code, nor am I interested in
keeping the session alive via a cron job, as that’s a hack IMO, and
not a solution.
So, if anyone has any thoughts, I’d love to hear them. Thanks.
The gem’s code can be found at GitHub - aasmith/openx: A ruby interface the the OpenX XML-RPC interface, for
anyone who is curious.