8

Sto eseguendo alcuni codici di test di base, con web.py e GAE (Windows 7, Python27). Il modulo consente di inviare messaggi al datastore. Quando interrompo l'app ed eseguo di nuovo, tutti i dati pubblicati in precedenza sono scomparsi. Aggiungere manualmente le entità usando l'admin (http: // localhost: 8080/_ah/admin/datastore) ha lo stesso problema.Il contenuto del datastore locale dell'app Engine non persiste

ho provato a fissare il percorso nelle Impostazioni Applicazione che utilizza flag extra:

--datastore_path=D:/path/to/app/ 

(non era sicuro sulla sintassi lì). Non ha avuto effetto. Ho cercato il mio computer per * .datastore, e non sono riuscito a trovare alcun file, il che sembra sospetto, anche se i dati sono ovviamente archiviati da qualche parte per la durata dell'applicazione in esecuzione.

from google.appengine.ext import db 
import web 

urls = (
    '/', 'index', 
    '/note', 'note', 
    '/crash', 'crash' 
) 

render = web.template.render('templates/') 

class Note(db.Model): 
    content = db.StringProperty(multiline=True) 
    date = db.DateTimeProperty(auto_now_add=True) 

class index: 
    def GET(self): 
      notes = db.GqlQuery("SELECT * FROM Note ORDER BY date DESC LIMIT 10") 
      return render.index(notes) 

class note: 
    def POST(self): 
      i = web.input('content') 
      note = Note() 
      note.content = i.content 
      note.put() 
      return web.seeother('/') 

class crash: 
    def GET(self): 
      import logging 
      logging.error('test') 
      crash 

app = web.application(urls, globals()) 

def main(): 
    app.cgirun() 

if __name__ == '__main__': 
    main() 

UPDATE: quando l'eseguo tramite linea di comando, ottengo il seguente:

WARNING 2012-04-06 19:07:31,266 rdbms_mysqldb.py:74] The rdbms API is not available because the MySQLdb library could not be loaded. 
INFO  2012-04-06 19:07:31,778 appengine_rpc.py:160] Server: appengine.google.com 
WARNING 2012-04-06 19:07:31,783 datastore_file_stub.py:513] Could not read datastore data from c:\users\amy\appdata\local\temp\dev_appserver.datastore 
WARNING 2012-04-06 19:07:31,851 dev_appserver.py:3394] Could not initialize images API; you are likely missing the Python "PIL" module. ImportError: No module named _imaging 
INFO  2012-04-06 19:07:32,052 dev_appserver_multiprocess.py:647] Running application dev~palimpsest01 on port 8080: http://localhost:8080 
INFO  2012-04-06 19:07:32,052 dev_appserver_multiprocess.py:649] Admin console is available at: http://localhost:8080/_ah/admin 

suggerendo che il datastore ... non ha installato correttamente?

+0

possibile duplicato di [datastore locale non persistente tra i riavvii dell'applicazione] (http://stackoverflow.com/questions/7430888/local-datastore-not-persisted-between-application-restarts) –

+0

@AdamCrossland Non credo è un dup, in questa domanda ogni cosa viene cancellata mentre nella domanda precedente viene cancellata una parte dei dati. –

+0

Dai un'occhiata ai log (nel pannello della console) quando pranzi l'app vedrai qualche avviso lì? –

risposta

7

A partire da 1.6.4, abbiamo interrotto il salvataggio del datastore dopo ogni scrittura. Questo metodo non ha funzionato durante la simulazione del modello transazionale trovato nell'archivio dati ad alta replicazione (si perderebbero le ultime due scritture). È anche orribilmente inefficiente. L'abbiamo modificato in modo che lo stub del datastore svuota tutte le scritture e salva il suo stato all'arresto. Sembra che il server dev_appserver non si spenga correttamente. Si dovrebbe vedere:

applicazione di tutte le transazioni in sospeso e salvare il datastore

nei registri quando spegnere il server (vedere source code e source code). In caso contrario, significa che il server dev_appserver non viene arrestato in modo pulito (con un segnale TERM o KeyInterrupt).

+0

Che cos'è il modo corretto di spegnere dev_appserver? Su Ubuntu uso l'interrupt Ctrl + c e funziona. Su Windows, prompt dei comandi funziona pure. Ma su Windows, con git bash, non persiste. –