Wednesday, August 5, 2009

JRuby + Merb + Google AppEngine MemCache

Searching far and wide for a cheap Java based web hosting provider, I became interested in learning about Google's AppEngine, which offers free space for web applications within reasonable access limits. I also thought that this would be a good opportunity to learn some Ruby (JRuby) to write a web application. In short, this post is about how to configure MERB running on JRuby/Google AppEngine to use Google's MemCache store to store session data via memcache instead of cookies.

I wanted to do this because I didn't want my web application data stored in a browser's cookie and so either I could use MemCache or the DataStore and I chose memcache. I assume that you have an AppEngine project setup with MERB as your web framework of choice.

All the changes described are located in /war/WEB-INF/config/init.rb
  1. Load the APIs (place these near the top of init.rb)
    # Load the apis
    ENV['APPLICATION_ROOT'] = File.join(File.dirname(__FILE__), '..')
    require 'appengine-apis/local_boot'
  2. Change the session store from cookie to memcache
    c[:session_store] = 'memcache'
  3. Add the following to the Merb::BootLoader.after_app_loads section # This will get executed after your app's classes have been loaded.
    Merb::MemcacheSession.store = AppEngine::Memcache.new
    module AppEngine
    # For the memcache-client gem.
    class Memcache
    include Merb::MemcacheStore
    end
    end
The first two and a good portion of the third step are standard Merb as far as I understand (although it took me some digging through the Merb code to find this). The second part of the third step is what I discovered when looking at the source code to see how the standard Memcache gem is integrated into the memcache store. Once I added this mixin AppEngine module, I had session data stored in memcache! Post comments if this works or doesn't work for you and/or if you have any other suggestions, please post so that others can find it!

2 comments:

  1. Wow, this post throws it back to the early days of JRuby and Merb! It's fascinating to see how tech has evolved since then, especially with newer Big Data capabilities enhancing personalized marketing strategies. If you're curious about this evolution, check out an insightful introduction to Big Data here. It really puts into perspective how far we've come!

    ReplyDelete