Hi,
I am trying to write a session store for rails that uses the big table
from
google. I have written the class and pasted into here. The problem is
I
keep getting this error when I try to start the dev server:
Caused by: org.jruby.exceptions.RaiseException: Expected
/Users/joshmoore/code/gaej_rails/test/tmp/war/WEB-INF/lib/big_table_servlet_store.rb
to define BigTableServletStore
at
Kernel.raise(/Users/joshmoore/code/gaej_rails/test/tmp/war/WEB-INF/vendor/rails/activesupport/lib/active_support/dependencies.rb:426)
at
ActiveSupport::Dependencies.load_missing_constant(/Users/joshmoore/code/gaej_rails/test/tmp/war/WEB-INF/vendor/rails/activesupport/lib/active_support/dependencies.rb:80)
at
ActiveSupport::Dependencies::ModuleConstMissing.const_missing_with_dependencies(/Users/joshmoore/code/gaej_rails/test/tmp/war/WEB-INF/vendor/rails/activesupport/lib/active_support/dependencies.rb:92)
I do not get it because BigTableServletStore is defined in
big_table_servlet_store.rb (it is the code below). Does anybody know
what
is going own?
module ActionController
module Session
class BigTableServletStore < AbstractStore
DATASTORE = Google::DatastoreServiceFactory.datastore_service
RAILS_SESSION_ENTITY = “__current_rails_session”
RAILS_SESSION_KEY = “__rails_session_data”
def initialize(app, options = {})
# Support old :expires option
options[:expire_after] ||= options[:expires]
super
@session_id = session.session_id
@key = Google::KeyFactory.create_key(RAILS_SESSION_ENTITY,
@session_id)
@data = {}
super
end
end
def marshal(data)
ActiveSupport::Base64.encode64(Marshal.dump(data))
if data end
def unmarshal(data)
Marshal.load(ActiveSupport::Base64.decode64(data))
if data end
private
def get_session(env, sid)
sid ||= generate_sid
@key = Google::KeyFactory.create_key(RAILS_SESSION_ENTITY,
sid)
#begin
entity = DATASTORE.get(@key)
if entity.has_property(RAILS_SESSION_STORE)
session =
unmarshal(eneity.get_property(RAILS_SESSION_KEY)) ||
{}
session = @pool.get(sid) || {}
#rescue
# session = {}
#end
[sid, session]
end
def set_session(env, sid, session_data)
options = env['rack.session.options']
expiry = options[:expire_after] || 0
#begin
entity = Google::Entity.new(RAILS_SEESION_ENTITY, sid)
entity.set_property(RAILS_SESSION_KEY, marshal(options))
DATASTORE.put(entity)
#@pool.set(sid, session_data, expiry)
return true
#rescue
# return false
#end
end
#def update
# entity = Google::Entity.new(RAILS_SESSION_ENTITY, @session_id)
# entity.set_property(RAILS_SESSION_KEY, marshal(@data))
# DATASTORE.put(entity)
#end
end
end
end
module Google
import com.google.appengine.api.datastore.DatastoreServiceFactory
import com.google.appengine.api.datastore.Entity
import com.google.appengine.api.datastore.KeyFactory
import com.google.appengine.api.datastore.Key
import com.google.appengine.api.datastore.EntityNotFoundException
end