Question

I'm having a little trouble understanding how to get Sinatra to cache sessions. This problem manifests itself when I fire up more than one application instance (ala Puma or multiple Thins).

I'm asking Sinatra (1.4) to use sessions like this:

 enable :sessions
 set :session_secret, 'secret sauce'
 set :protection, except: :session_hijacking

 $connections = []
 set connections: $connections

I've left the $connections in there to demonstrate that this App is using server sent events, in case that has any relevance.

I am them using Persona (Mozilla) to support logins/authentication and am ultimately storing the logged in email in Sinatra's session with:

session[:auth_email] = data["email"]

Where data is given to me by Persona.

What I can't work out is how I ask Sinatra to store session data in a persistent store (ideally Redis) so the app can be recycled without losing session state (I've done this with Ramaze before with Ramaze::Cache.options.session = Ramaze::Cache::Redis.using())

Was it helpful?

Solution

Check out Moneta.

The project's Github page gives examples of how to set this up and is extremely easy to integrate with Sinatra.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top