Skip to content

Instantly share code, notes, and snippets.

#
1.
06-02 10:24PM 06.935 /rails/info/properties 500 4674ms 6766cpu_ms 0kb Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3,gzip(gfe)
See details
66.91.76.244 - - [02/Jun/2010:22:24:11 -0700] "GET /rails/info/properties HTTP/1.1" 500 109 "http://jruby-gdata.appspot.com/" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3,gzip(gfe)" "jruby-gdata.appspot.com"
2.
E 06-02 10:24PM 11.331
@jwang
jwang / iPadTest.h
Created May 15, 2010 23:07
header file to test if iPad for Universal Apps
#ifndef UI_USER_INTERFACE_IDIOM
#define IPAD NO
#define OS32PLUS NO
#else
#define IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define OS32PLUS YES
#endif
@jwang
jwang / Gemfile
Created April 24, 2010 00:46
These are the necessary changes to add RESTful JSON (and in the process, fix RESTful XML) to the demo on Gist
# Critical default settings:
disable_system_gems
disable_rubygems
bundle_path '.gems/bundler_gems'
# List gems to bundle here:
gem 'rails_dm_datastore'
gem 'rails', "2.3.5"
gem 'dm-core'
gem "json-jruby"
require 'openid'
require 'net/http'
require 'appengine-apis/urlfetch'
class MyFetcher < OpenID::StandardFetcher
def fetch(url, body=nil, headers=nil, redirect_limit=REDIRECT_LIMIT)
raise OpenID::FetchingError, "Blank URL: #{url}" if url.blank?
headers ||= {}
headers['User-agent'] ||= USER_AGENT

The DeferredDispatcher is a way to get around the 30-second limit for App Engine requests. We don't want spin-up to be a "show stopper", and we want every request to have a full 30 seconds to do "real work". We added this to appengine-rack 0.0.7, so folks won't need an additional require. The DeferredDispatcher works by using redirects to break up a loading request into 3 parts.

  1. initialize the jruby runtime and jruby-rack
  2. require the framework, and create a new dispatcher
  3. process the real request, with a full 30 seconds

We are inside jruby-rack, so obviously the runtime and Jruby-rack have initialized, so first we set @runtime to true (from nil) and redirect. Next pass, we notice that the @rack_app is nil, so we require the framework (which can take some time) and create a new dispatcher (these have been passed in as a hash) and redirect. In the final pass, we hand the environment to the dispatcher, to do the original "work" of the request.