[appengine-jruby] push by mando.woodie - Support warmup feature on 2010-12-04 02:06 GMT

2 views
Skip to first unread message

appengi...@googlecode.com

unread,
Dec 3, 2010, 9:06:48 PM12/3/10
to appengine-j...@googlegroups.com
Revision: 4340cf961b
Author: John Woodell <woo...@google.com>
Date: Fri Dec 3 18:05:47 2010
Log: Support warmup feature
http://code.google.com/p/appengine-jruby/source/detail?r=4340cf961b

Added:
/appengine-rack/src/com/google/appengine/jruby/BusyContextListener.class
/appengine-rack/src/com/google/appengine/jruby/rack.mirah
Deleted:
/appengine-rack/src/com/google/appengine/jruby/rack.duby
Modified:
/appengine-rack/Rakefile
/appengine-rack/src/build.sh

/appengine-rack/src/com/google/appengine/jruby/AppEngineRackApplicationFactory.class
/appengine-rack/src/com/google/appengine/jruby/LazyApplicationFactory.class
/appengine-rack/src/com/google/appengine/jruby/LazyContextListener.class
/appengine-rack/src/com/google/appengine/jruby/Rack.class
/appengine-tools/lib/appengine-tools/app_yaml.jar
/appengine-tools/src/com/google/appengine/jruby/JRubyYamlPlugin.java
/google-appengine/Rakefile

=======================================
--- /dev/null
+++
/appengine-rack/src/com/google/appengine/jruby/BusyContextListener.class
Fri Dec 3 18:05:47 2010
@@ -0,0 +1,13 @@
+Êþº¾ 1
+ .com/google/appengine/jruby/BusyContextListener )org/jruby/rack/RackServletContextListener
+rack.mirah newApplicationFactory G(Ljavax/servlet/ServletContext;)Lorg/jruby/rack/RackApplicationFactory; +org/jruby/rack/SharedRackApplicationFactory :com/google/appengine/jruby/AppEngineRackApplicationFactory
+ <init> ()V
+ %org/jruby/rack/RackApplicationFactory *(Lorg/jruby/rack/RackApplicationFactory;)V
+ this 0Lcom/google/appengine/jruby/BusyContextListener; context
+Ljavax/servlet/ServletContext;
+ Code LocalVariableTable LineNumberTable
+SourceFile ! M »
Y» Y· À · À °
+
+ P Q
+ # *· ±
+
=======================================
--- /dev/null
+++ /appengine-rack/src/com/google/appengine/jruby/rack.mirah Fri Dec 3
18:05:47 2010
@@ -0,0 +1,83 @@
+import org.jruby.rack.DefaultRackApplicationFactory
+import org.jruby.rack.RackApplicationFactory
+import org.jruby.rack.RackInitializationException
+import org.jruby.rack.RackServletContextListener
+import org.jruby.rack.SharedRackApplicationFactory
+
+class AppEngineRackApplicationFactory < DefaultRackApplicationFactory
+ def initialize
+ end
+
+ def createApplicationObject(runtime)
+ createRackServletWrapper(
+ runtime, "eval(IO.read('config.ru'), nil, 'config.ru', 1)")
+ end
+
+ def createRackServletWrapper(runtime, rackup)
+ runtime.evalScriptlet(<<-EOF)
+ require 'appengine-rack/boot'
+ load 'jruby/rack/boot/rack.rb'
+ Rack::Handler::Servlet.new(Rack::Builder.new {( #{rackup}
+ )}.to_app)
+ EOF
+ end
+end
+
+class LazyApplicationFactory; implements RackApplicationFactory
+ def initialize
+ end
+
+ def init(context)
+ @context = context
+ end
+
+ def real_factory
+ throws RackInitializationException
+ if @factory.nil?
+ @factory = SharedRackApplicationFactory.new(
+ AppEngineRackApplicationFactory.new)
+ @factory.init(@context)
+ end
+ @factory
+ end
+
+ def newApplication
+ throws RackInitializationException
+ real_factory.newApplication
+ end
+
+ def getApplication
+ throws RackInitializationException
+ real_factory.getApplication
+ end
+
+ def finishedWithApplication(app)
+ @factory.finishedWithApplication(app) unless @factory.nil?
+ end
+
+ def getErrorApplication
+ real_factory.getErrorApplication rescue nil
+ end
+
+ def destroy
+ @factory.destroy unless @factory.nil?
+ end
+end
+
+class LazyContextListener < RackServletContextListener
+ def newApplicationFactory(context)
+ if context.getServerInfo.contains("Development")
+ RackApplicationFactory(SharedRackApplicationFactory.new(
+ RackApplicationFactory(AppEngineRackApplicationFactory.new)))
+ else
+ RackApplicationFactory(LazyApplicationFactory.new)
+ end
+ end
+end
+
+class BusyContextListener < RackServletContextListener
+ def newApplicationFactory(context)
+ RackApplicationFactory(SharedRackApplicationFactory.new(
+ RackApplicationFactory(AppEngineRackApplicationFactory.new)))
+ end
+end
=======================================
--- /appengine-rack/src/com/google/appengine/jruby/rack.duby Tue May 4
09:25:11 2010
+++ /dev/null
@@ -1,76 +0,0 @@
-import org.jruby.rack.DefaultRackApplicationFactory
-import org.jruby.rack.RackApplicationFactory
-import org.jruby.rack.RackInitializationException
-import org.jruby.rack.RackServletContextListener
-import org.jruby.rack.SharedRackApplicationFactory
-
-class AppEngineRackApplicationFactory < DefaultRackApplicationFactory
- def initialize
- end
-
- def createApplicationObject(runtime)
- createRackServletWrapper(
- runtime, "eval(IO.read('config.ru'), nil, 'config.ru', 1)")
- end
-
- def createRackServletWrapper(runtime, rackup)
- runtime.evalScriptlet(<<-EOF)
- require 'appengine-rack/boot'
- load 'jruby/rack/boot/rack.rb'
- Rack::Handler::Servlet.new(Rack::Builder.new {( #{rackup}
- )}.to_app)
- EOF
- end
-end
-
-class LazyApplicationFactory; implements RackApplicationFactory
- def initialize
- end
-
- def init(context)
- @context = context
- end
-
- def real_factory
- throws RackInitializationException
- if @factory.nil?
- @factory = SharedRackApplicationFactory.new(
- AppEngineRackApplicationFactory.new)
- @factory.init(@context)
- end
- @factory
- end
-
- def newApplication
- throws RackInitializationException
- real_factory.newApplication
- end
-
- def getApplication
- throws RackInitializationException
- real_factory.getApplication
- end
-
- def finishedWithApplication(app)
- @factory.finishedWithApplication(app) unless @factory.nil?
- end
-
- def getErrorApplication
- real_factory.getErrorApplication rescue nil
- end
-
- def destroy
- @factory.destroy unless @factory.nil?
- end
-end
-
-class LazyContextListener < RackServletContextListener
- def newApplicationFactory(context)
- if context.getServerInfo.contains("Development")
- RackApplicationFactory(SharedRackApplicationFactory.new(
- RackApplicationFactory(AppEngineRackApplicationFactory.new)))
- else
- RackApplicationFactory(LazyApplicationFactory.new)
- end
- end
-end
=======================================
--- /appengine-rack/Rakefile Wed Jul 14 19:52:08 2010
+++ /appengine-rack/Rakefile Fri Dec 3 18:05:47 2010
@@ -13,7 +13,7 @@

spec = Gem::Specification.new do |s|
s.name = "appengine-rack"
- s.version = "0.0.11"
+ s.version = "0.0.12"
s.author = "Ryan Brown"
s.email = "rib...@google.com"
s.homepage = "http://code.google.com/p/appengine-jruby"
=======================================
--- /appengine-rack/src/build.sh Tue May 25 19:28:08 2010
+++ /appengine-rack/src/build.sh Fri Dec 3 18:05:47 2010
@@ -1,16 +1,13 @@
#!/bin/sh
-SDK_VER='1.3.4' # App Engine SDK gem version
-JRR_VER='1.0.1' # JRuby-Rack gem version
+SDK_VER='1.4.0' # App Engine SDK gem version
+JRR_VER='1.0.3' # JRuby-Rack gem version
GEM_DIR='/Library/Ruby/Gems/1.8/gems'
-DUBY_COMPLETE='/Developer/duby-complete.jar' # nightly jar
+#DUBY_COMPLETE='/Developer/duby-complete.jar' # nightly jar

### Construct what we need to set the classpath
SDK_DIR="$GEM_DIR/appengine-sdk-$SDK_VER/appengine-java-sdk-$SDK_VER"
-SERVLET="$SDK_DIR/lib/shared/geronimo-servlet_2.5_spec-1.2.jar"
+SERVLET="$SDK_DIR/lib/shared/servlet-api.jar"
JRUBY_RACK="$GEM_DIR/jruby-rack-$JRR_VER/lib/jruby-rack-$JRR_VER.jar"

### Generate class files from nightly jar (or installed gem)
-java -jar $DUBY_COMPLETE compile -c $JRUBY_RACK:$SERVLET \
- com/google/appengine/jruby/rack.duby
-#export CLASSPATH=$JRUBY_RACK:$SERVLET:.
-#dubyc com/google/appengine/jruby/rack.duby
+mirahc -c $JRUBY_RACK:$SERVLET:. com/google/appengine/jruby/rack.mirah
=======================================
---
/appengine-rack/src/com/google/appengine/jruby/AppEngineRackApplicationFactory.class
Tue May 25 19:28:08 2010
+++
/appengine-rack/src/com/google/appengine/jruby/AppEngineRackApplicationFactory.class
Fri Dec 3 18:05:47 2010
@@ -1,4 +1,5 @@

Êþº¾ 1 4 :com/google/appengine/jruby/AppEngineRackApplicationFactory ,org/jruby/rack/DefaultRackApplicationFactory
rack.duby <init> ()V
+rack.mirah <init> ()V

this <Lcom/google/appengine/jruby/AppEngineRackApplicationFactory; createApplicationObject 9(Lorg/jruby/Ruby;)Lorg/jruby/runtime/builtin/IRubyObject; /eval(IO.read('config.ru'),
nil, 'config.ru',
1) createRackServletWrapper K(Lorg/jruby/Ruby;Ljava/lang/String;)Lorg/jruby/runtime/builtin/IRubyObject;
runtime Lorg/jruby/Ruby; java/lang/StringBuilder
require 'appengine-rack/boot'
@@ -19,8 +20,9 @@
2

0 f +» Y· ¶
-,¶ $¶
- &¶
+,YÆ ¶ $§ W &¶
+ (¶
¶ '¶ -° 1
. / 2
3
+ 5
=======================================
---
/appengine-rack/src/com/google/appengine/jruby/LazyApplicationFactory.class
Tue May 4 09:25:11 2010
+++
/appengine-rack/src/com/google/appengine/jruby/LazyApplicationFactory.class
Fri Dec 3 18:05:47 2010
Binary file, no diff available.
=======================================
---
/appengine-rack/src/com/google/appengine/jruby/LazyContextListener.class
Tue May 4 09:25:11 2010
+++
/appengine-rack/src/com/google/appengine/jruby/LazyContextListener.class
Fri Dec 3 18:05:47 2010
@@ -1,4 +1,5 @@

Êþº¾ 1 / .com/google/appengine/jruby/LazyContextListener )org/jruby/rack/RackServletContextListener
rack.duby newApplicationFactory G(Ljavax/servlet/ServletContext;)Lorg/jruby/rack/RackApplicationFactory;
+rack.mirah newApplicationFactory G(Ljavax/servlet/ServletContext;)Lorg/jruby/rack/RackApplicationFactory;
javax/servlet/ServletContext
getServerInfo ()Ljava/lang/String;

Development java/lang/String contains (Ljava/lang/CharSequence;)Z
=======================================
--- /appengine-rack/src/com/google/appengine/jruby/Rack.class Tue May 25
19:38:52 2010
+++ /appengine-rack/src/com/google/appengine/jruby/Rack.class Fri Dec 3
18:05:47 2010
@@ -1,4 +1,5 @@
Êþº¾ 1 com/google/appengine/jruby/Rack java/lang/Object
rack.duby main ([Ljava/lang/String;)V argv [Ljava/lang/String; <init> ()V
+rack.mirah main ([Ljava/lang/String;)V argv [Ljava/lang/String; <init> ()V


this !Lcom/google/appengine/jruby/Rack; Code LocalVariableTable LineNumberTable
SourceFile ! ? ±
B
=======================================
--- /appengine-tools/lib/appengine-tools/app_yaml.jar Tue Jul 13 15:44:46
2010
+++ /appengine-tools/lib/appengine-tools/app_yaml.jar Fri Dec 3 18:05:47
2010
@@ -1,43 +1,40 @@
PK ‚}í<
META-INF/þÊ PK PK ‚}í< META-INF/MANIFEST.MFóMÌËLK-.Ñ
-K-*ÎÌϳR0Ô3àår.JM,IMÑuª ˜é Ä (h8 ä¤*xæ%ëiòrñr PK z+ªÊ< < PK
+K-*ÎÌϳR0Ô3àår.JM,IMÑuª ˜é Ä )h8 ä¤*xæ%ëiòrñr PK ù@~Ï< < PK

;É< META-INF/services/PK ;É< C META-INF/services/com.google.apphosting.utils.config.AppYaml$PluginKÎÏÕKÏÏOÏIÕK,(HÍKÏÌKÕË**MªÔó
’‘‰¹9 9¥@a PK 4˜ìX) * PK
,u‰; com/PK
,u‰; com/google/PK
,u‰; com/google/appengine/PK

+dÉ< com/google/appengine/jruby/PK }í< 0 com/google/appengine/jruby/JRubyYamlPlugin.class•TYWÓP þ.´M—È @,Š€lÝ ¨¨€
‹l–å€ ¼xÒöRƒ!)Iê ÿ‰ÿB_ÊQÎñ•£?ÊãÜ´ í ¼ÌÜ;óÍÌ73¹ùýçÇO ãØ £ AÜ c Ca cDÂh ~aL "%tZ
2 Ô0d ˆËX„ LˆÓ}!
- ñPèÉ
- ýX S ¦ 3º©»³ ͱøk ߢUà ­YÝä›å£
-·_j9ƒ,RɶòÜq öcÙ¼u¤ -«hpU+•Þ[Ž«›Eµìꆣæ-ó@/ªó¥ÒžvdLǯ f ïZe;Ï—uQ³s}§œ; žm£\ÔÍÌ¡öQ“ E ƒÿÐ&Ÿ„§2f1'ᙌy,0L\½ÜЪf nSs—'yÍ4¹½hhŽÃ©×&5!c K QË.f¼š [Ë Èì
–.·e<Ç’Œe¬0t †^1uÞ¶µ“¬î¸2V±&a]Æ ,ÈÈbEÆ Ö 2D5S¥š!ªÜ¤ y­FVû|
²h™.ÿäŠ
-Ü u61G\ÕR9gèy [‚W¢¾ßj ÕK¢6Œ ¡Í£gh4 ­Ü!Ï» ãט×EšÀÅ!qõ`Zm‘»;eÓÕ Äjcñì?2»®MqÓu «6*Æ ËšA»èŠe éOÇ÷
àp÷•m4 j)Å7
-"@uU "Q[6¥T.Xx ƒ& ç HG¬ !R¶ÔÛèõh
- }=”ýb] +;u× òn{»{g[ µ8u à&½y†[ô h"M :ÉÛtë%ÍHû §`ßèÀp‡dÀ3v‘ìÅÝ ô
-úI +MÉ
-š+ð}ÁÁ ü{§ l¤ ©‚`J U &od3}Ž¶3Èä¼±™LWÐ’N}Gk Þ ·mÊ õ C©ù§|ɨ¯‚ö¨OQ.1
-ç %•Î
-º’_/i-£ d7ÄSí¤
-zˆX?y†‰fœˆŽ£ “Ôí,†°DÖ5Œ` £xKÞ
-RБ†
-1j¤Ï›D?Ù Åkl 1„hBƒ˜
„þ PK M“«ðç - PK +dÉ< / com/google/appengine/jruby/JRubyYamlPlugin.java S]oÓ@ |
ϯXùÉAå\x¤PÉô UZÅ-UŸÐÅÞ8W.wæîÜ4 þwöÎvã$­D %¶wvvfÖ—$p¢ëµ ÕÂÁûÃw‡ðEëJ"dª`£$¡/\ˆ •Å U¢ ·@Hk^Ð_W9€ h¬Ð
-Þ³Cˆ= êJÑøÈS¬u K¾ ¥
-4 ‰CX˜ šƒ Ö „‚B/k)¸* VÂ-ÂœŽÅ+ »ŽCÏ
-'8§†šîæC p׉ Ÿ
-sõ‡$Y­VŒ ÅL›*‘-Ö& ÙÉÙ$?{Kª»® %ÑZ0ø» †
-ÏÖÀkRUð i•| Ú ¯ RÍi¯ze„ ª: «çnÅ
-zšRXgĬq[¡õ Éú @±q QšC–Gð9ͳüÀ“Üf×_/o®á6 NÓÉuv–Ãå N.'§Ùuv9¡»sH'wð=›œ
- Rd4 kã
- LáãÄ2d—#nI˜ëV’­± sQ 5U5¼B¨ô EŽ F³ Ö¯Õ’ÀÒÓH± Ž»ðhÏ £„ y
-Z$«Â[D©×¨*¡ Ý›f¶> þ DÒµq;˜
-¶>iÖ8!-+´š‹Š¥u}Ç—ò¨o¹ç <
Ø EüÂãÔ ¾nk£º™Ñj¡ œ û6¥ÙžëJ6$&ćKTÎB7„u•¿#€®µ«@mtA±Çýýš~Æ
æ GÁYÄè½âÒƾÌ*tÓF9±Äx<îÁ sZ–!Ø)eu.¤CÓÕz!_i ’Ò7 è¯? ÂÕ."¦ã׶  Ì¢»12Ž’7Ñkõvl
-Ñyi·Â<€m m:}˜ wæ
-â½°¤«wÛÕìF” f $ ”›$`H Ìõ»Û ·¡„vœ
-ŒëYž1O£mzÆË2
- @Àýeäh
-$º ­
->:¯ Õób‚¨œŽ´ªŽé”´µ¡÷
-¿c~ Ýw?äÙ¶ßMzÉõfÐsûžïçJ0
-½~ Ù ÿ³Þq
-m¥“£ étçÁhíØÀ_oÿ*” úr<~Ék/ Œ’–5Ú1Ðþ t Q¡Ñ—ŸFOÿ PK ˆn Êô Ì PK ‚}í<
META-INF/þÊ PK ‚}í<z+ªÊ< < = META-INF/MANIFEST.MFPK
+ j“Œqq³ ÷ RåÙƒUž, þ ½ÄR«¼Rå ²ìY
+ Ê ^ºgz¾îþº{f~þúö @ –R8Ž® ºSèÁÅ 2ÈÊÈ¥ cAh= CèK Ñ'£? ]bs¹ WpU¬® q= Bß b
A¡o%p[è! wdÜ•1Ì ¿e9V0Äp
“} u+œáPÑrøLX+qï‘Y²É"×=·Ì}Ÿa%S,»5£êºU› f½þÌõ Ë© a`Ù¾Qv §VÕ ®×—Íš=˜ý 0CjÁ
+½2 ·DÎŽ©ù°´!Næì°j9úš¹n*8‰S ÒšGg2F ÜØŒq ÷1Áпÿt] ¦S±¹GÅí®”IÇáÞ¨mú>§Z[Œœ‚IL1h®WÕ£œºg–Ÿëó$ˆeÀ= 0¥ ˆi†´` %3†=ÏÜ(Z~ ` ³2æ <Ä„‚yL+XÀ,ƒNTõ-ª:Qå •È·sŒ„þƨë üU
bpGäy$\ ×øKÓ«
+u O0Fô zX²­²‚EA5×Ü‚­¸F ×ØÓQ†öˆ±mR fKk¼
+0ôýG wÂÄw ¹ý;Ó´«<˜ Àª‰ig²Å?d ü › nÙ( š6 §3SÜK 0»B Ÿ ={ `;¤¸æI lM ¡•HlÏŸBª;,¢!ŠÞ ‡VÿoH:³ !B¶5ÛèA™•
+](Š¾3AòUü¦mšN' ’ :•UŸ{ëVYܺ´ÿ/k aç¢9¯z®K
Úü& ÎA£ÿƒá }&-¤é <M;¡ i)÷ ì3- Î ŒGÆN’gÉ9‚2ºód >¨-ù 4 ûˆ·ß!- A|
ºW• HôªÉ RtÚ:SØDûw(txp&_h ­Ðû ‡Z°H§í 1-¶ uû| –×b
+
+Öbªº‹I Hšô FÊkR
+š¤vîbŽl"™W 6p,ÿi—ú
+Ž <J¿Ÿ† ªú8U}–*î¦Z³TH ¡®QQCè¢ÿ¡›Þp ½¼‹XB % ð :j0°ŽKx ~¼ÁU¼# ÷¸I
+8 uð zI«´’È; $åèÁH<ù PK 1CK›: ± PK STƒ= / com/google/appengine/jruby/JRubyYamlPlugin.java T]oÓ@ |
ϯXùÉAå\x¤€dJ C•Vq ê ºØ çàrgîÎM#ÔÿÎÞÙ® JTUbggggf}N 8×õÖˆjåàõé«Sø¬u% 2U°I’Ð?\Š •Å U¢ ·BHk^ÐWW9 ïh¬Ð
+^³Sˆ= êJÑôÌSlu k¾ ¥
+4 ‰CXX
+šƒ Ö „‚B¯k)¸* 6­œŽÅ+ »ŽC/
+'8§†šî–c
p׉ +çê7I²Ùl Š™6U"[¬M.³ó‹Y~ñ’Tw]·J¢µ`ðO# 9^l פªà Ò*ù ´ ^ ¤šÓ^õÆ 'Tu V/݆ ô4¥°ÎˆEãvBë5’õ1€bã
+¢4‡, àCšgù‰'ù‘Ý|¹º½ é|žÎn²‹
+®æp~5û˜ÝdW3ºû éì ¾e³ '€ ÍÁ‡Úx $Sø8± Ùåˆ; –º•dk,ÄR dMU
+¯ *} F‘#¨Ñ¬
+õkµ$°ô4R¬
+ã.ütà‹Q¿= -’Uá)¢ÔkT•PÈ~™f±=›Lþ DÒµq{˜•¶>iÖ8!-+´ZŠŠ¥u}Ç×ò¬oùÅïy@°KŠøÈÏ©1|
ÛÖ&u³ ÕB!9%öuN³=×µlHLˆ רœ
+n ë* ' ]kW Úè‚b ûû-}L @,!Ž‚³ˆÑsÅ¥ }™Uèæ rb ñtÚƒ (æ´,C°sÊê“ MWë
+|¡}HJß  ¿~
+7ûˆ˜Ž_Û:‚2‹îÖÈ8J^DÏÕÛ±qDç¥Ý
+ó 6( :}˜o÷澇U{aIWﶫÙA” f ’ƒFÊ! “ sýî Æ
+”ÐŽ³£q=Ë æq²KÏxYÆ£ x¸Œ
+ͽDw®•Ã çU zZL •Ó‘VÕ{:%mmì½Çï™ A Ý yvíw“Ž¹
+ =µïú Ǹ« ãÇv|Üì°ó=†ç 3ûÐØí³4‡)Ó tÝÔ`i>½UŽ¥Û•Æáfj¡éuô³/íf<4
+F<"ûï„ ¦õ ÏW_hCj­E; WŽ.Øî^'FkÇFÒ{ƒ×¡üÓ—ãé1 ½¶10JZÖhOWûiÐ5F
+F_~œ<Nþ PK ·gŽ 1 PK \Tƒ=
META-INF/þÊ PK \Tƒ=ù@~Ï< < = META-INF/MANIFEST.MFPK


;É< » META-INF/services/PK ;É<4˜ìX) * C ë META-INF/services/com.google.apphosting.utils.config.AppYaml$PluginPK

=======================================
--- /appengine-tools/src/com/google/appengine/jruby/JRubyYamlPlugin.java
Wed Jun 9 12:31:19 2010
+++ /appengine-tools/src/com/google/appengine/jruby/JRubyYamlPlugin.java
Fri Dec 3 18:05:47 2010
@@ -38,7 +38,16 @@
listeners = new ArrayList<String>();
yaml.setListeners(listeners);
}
- listeners.add("com.google.appengine.jruby.LazyContextListener");
+ listeners.add("com.google.appengine.jruby.BusyContextListener");
+ // listeners.add("org.jruby.rack.RackServletContextListener");
+
+ // Add the warmup service
+ List<String> services = yaml.getInbound_services();
+ if (services == null) {
+ services = new ArrayList<String>();
+ yaml.setInbound_services(services);
+ }
+ services.add("warmup");

// Set the public root.
if (yaml.getPublic_root() == null) {
=======================================
--- /google-appengine/Rakefile Thu Dec 2 15:42:40 2010
+++ /google-appengine/Rakefile Fri Dec 3 18:05:47 2010
@@ -17,7 +17,7 @@

s.platform = Gem::Platform::RUBY
s.add_dependency "appengine-apis", "0.0.22"
- s.add_dependency "appengine-rack", "0.0.11"
+ s.add_dependency "appengine-rack", "0.0.12"
s.add_dependency "appengine-sdk", "1.4.0"
s.add_dependency "appengine-tools", "0.0.17"
s.has_rdoc = false
Reply all
Reply to author
Forward
0 new messages