Google App Engine är fortfarande ett skämt
Posted in Frisim on december 30th, 2008 by Clas – 3 CommentsGoogle fortsätter att blogga om sin Google App Engine (GAE), men det verkar inte hända så mycket med själva utvecklingen. Det saknas fortfarande en del väsentliga delar för att det ska gå att bygga något smidigt med GAE, är min erfarenhet. Nu verkar de ha planer på att börja ta betalt, och kanske kan det snabba på utvecklingen.
Det jag irriterar mig mest på är att systemet hela tiden varnar för att min app drar för mycket ”avergage CPU”, trots att min ”CPU time” alltid är nära 0%. Problemet är säkert relaterat till att jag använder URL Fetch API:et. Men eftersom en URL Fetch har en ”timeout” på 5 sekunder, satt av Google själva, så förstår jag inte varför den klagar. Ett andra problem är GAEs Datastore. Till saken hör att Datastore är rätt annorlunda mot en SQL databas, så det kräver en hel funderande innan den används, men att man t.ex. inte kan radera alla poster i en tabell på något enkelt sätt är lite dåligt.
Så här inför ett nytt år så tänkte jag rensa upp lite bland den RSS-data som finns lagrad i min feedcache-app. Att göra ”delete” på ett större antal poster leder ofta till ”timeout” hos GAE, så man måste radera i mindre ”batcher”, och allt måste ske endera från console, eller via webb-script. Jag satte ihop ett script som raderar 50 poster i min tabell rssItems varje gång det laddas, och automatladdade scriptet varannan sekund. Inte kul, men det fungerade. Såhär ser scriptet ut:
from google.appengine.ext import db
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
import wsgiref.handlers
from ffcache import rssItems
class CTable(webapp.RequestHandler):
def get(self, param):
q = db.GqlQuery("SELECT * FROM rssItems")
self.response.headers['Content-Type'] = 'text/html'
self.response.out.write("<html><head><meta HTTP-EQUIV=\"REFRESH\"
content=\"2; url=http://feedcache.frisim.se/cTable/\"></meta></head><body>")
try:
results = q.fetch(50)
for res in results:
res.delete()
self.response.out.write("<p>50 poster raderade</p>")
self.response.out.write("</body></html>")
except Exception, ints:
self.response.out.write(str(ints))
def main():
application = webapp.WSGIApplication([
('/cTable/', CTable),
])
wsgiref.handlers.CGIHandler().run(application)



