Google App Engine är fortfarande ett skämt

Google 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)

  1. Hjalmar skriver:

    Jag har inte testat gae alls så mycket som du (faktum är att jag mest har suttit brevid när vi kodade en testapp). Min spontana känsla är att det skulle kunna vara ett rätt käckt verktyg för att utbilda folk eftersom det är så integrerat. Men för riktiga projekt? Mjääää.. Hur galen måste man vara för att lägga seriös utvecklingstid i en miljö som är så låst till en plattform (även om man kan porta den till django eller vad det heter va?).

    Kul att du postar source i bloggen, det är alltid trevligt :)

  2. Clas skriver:

    Ja, för att komma igång att lära sig programmering så borde deras ”SDK” vara fantastisk. Bara att ladda ner och köra. Synd bara att Python är ett så kass språk ;-) Det är kul att posta kod i bloggen, men det är lite synd att min gamla WordPress-version har problem med att formatera den. Nu blev alla citattecken escape:ade.

  3. Clas skriver:

    Ah, bytte plugin för code-formattering – nu ser det bättre ut.

  1. There are no trackbacks for this post yet.