2011-08-15 14 views
5

Estoy haciendo algo que debería ser simple y atascarse una y otra vez. Estoy consiguiendo este error al subir archivos CSV bastante simples para mi servidor de desarrollo:Problema de Appengine BulkLoader con el servidor de desarrollo

Error in WorkerThread-0: app "dev~fbdec" cannot access app "fbdec"'s data 

El ser exacto de salida:

[INFO ] Logging to bulkloader-log-20110815.142554 
[INFO ] Throttling transfers: 
[INFO ] Bandwidth: 250000 bytes/second 
[INFO ] HTTP connections: 8/second 
[INFO ] Entities inserted/fetched/modified: 20/second 
[INFO ] Batch Size: 10 
[INFO ] Opening database: bulkloader-progress-20110815.142554.sql3 
Please enter login credentials for localhost 
Email: [email protected] 
Password for [email protected]: 
[INFO ] Connecting to localhost:8080/remote_api 
[INFO ] Skipping header line. 
[INFO ] Starting import; maximum 10 entities per post 
[ERROR ] [WorkerThread-0] WorkerThread: 
Traceback (most recent call last): 
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/adaptive_thread_pool.py", line 176, in WorkOnItems 
status, instruction = item.PerformWork(self.__thread_pool) 
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/bulkloader.py", line 764, in PerformWork 
transfer_time = self._TransferItem(thread_pool) 
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/bulkloader.py", line 935, in _TransferItem 
self.request_manager.PostEntities(self.content) 
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/bulkloader.py", line 1418, in PostEntities 
datastore.Put(entities) 
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/datastore.py", line 467, in Put 
return PutAsync(entities, **kwargs).get_result() 
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/datastore/datastore_rpc.py", line 658, in get_result 
results = self.__rpcs[0].get_result() 
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/apiproxy_stub_map.py", line 592, in get_result 
return self.__get_result_hook(self) 
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/datastore/datastore_rpc.py", line 1385, in __put_hook 
self.check_rpc_success(rpc) 
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/datastore/datastore_rpc.py", line 1074, in check_rpc_success 
raise _ToDatastoreError(err) 
BadRequestError: app "dev~fbdec" cannot access app "fbdec"'s data 
[INFO ] An error occurred. Shutting down... 
[ERROR ] Error in WorkerThread-0: app "dev~fbdec" cannot access app "fbdec"'s data 
[INFO ] 2 entities total, 0 previously transferred 
[INFO ] 0 entities (723 bytes) transferred in 7.9 seconds 
[INFO ] Some entities not successfully transferred 

Este es el archivo app.yaml:

application: fbdec 
version: 1 
runtime: python 
api_version: 1 

handlers: 
- url: /static 
    static_dir: static 

- url: /remote_api 
    script: $PYTHON_LIB/google/appengine/ext/remote_api/handler.py 
    login: admin 

- url: /.* 
    script: fbdec.py 

Esta es la llamada de shell para realizar la carga:

appcfg.py upload_data --config_file=fbdec/fbuploader.py --filename=cols.csv --kind=Cols --has_header --num_threads=1 --url=http://localhost:8080/remote_api fbdec/ 

Este es el código de subida por

import cgi 
import datetime 
import logging 
import os 

import datetime 
from google.appengine.ext import db 
from google.appengine.tools import bulkloader 
from os import environ 


class Grobs(db.Model): 
    coleccion = db.TextProperty() 
    objeto= db.TextProperty() 
    descripcion = db.TextProperty() 

class GrobLoader(bulkloader.Loader): 
    def __init__(self): 
     bulkloader.Loader.__init__(self, 'Grobs', 
            [('coleccion', str), 
            ('objeto', str), 
            ('descripcion', str) 
            ]) 

class Cols(db.Model): 
    coleccion = db.TextProperty() 
    descripcion= db.TextProperty() 

class ColLoader(bulkloader.Loader): 
    def __init__(self): 
     bulkloader.Loader.__init__(self, 'Cols', 
            [('coleccion', str), 
            ('descripcion', str) 
            ]) 

loaders = [GrobLoader, ColLoader] 

Y esto el archivo cols.csv:

coleccion,descripcion 
gafas,descripcion 
sombreros,descripcion 

Cualquier ayuda será muy bienvenida. No puedo entender lo que estoy haciendo mal.

Estoy usando Appengine 1.5.2 en Mac Osx Leopard. He probado tanto Python 2.5.4 como 2.6.6 (por si acaso).

Gracias de antemano y mis mejores deseos!

+2

La cuestión es que para ayudar a exponer los problemas de aplicaciones tendrían con la "s ~" como prefijo en los nombres de aplicaciones de alta redundancia, un prefijo "dev ~" se agregó a las aplicaciones del servidor de desarrollo. En teoría, cuando todo está funcionando bien, estos prefijos deben ser transparentes. Es posible que deba proporcionar '--application =' en la línea de comandos, aunque no estoy seguro de si desea incluir el dev ~ o no allí. – geoffspear

+0

Gracias por la explicación. No lo sabía. He probado el parámetro de Robert Kluin y también funciona bien. Mejor. –

+0

La actualización al último SDK debería solucionar esto. –

Respuesta

7

Al iniciar dev_appserver, pase el parámetro --default_partition="".

+0

Muchas gracias. Eso resolvió el problema. Gracias por la increíblemente rápida respuesta. Todo lo mejor. –

+2

Javier; usa la marca para aceptar la respuesta, lo que cierra la pregunta y hace que Robert sea un poquito más feliz por dentro. –

+0

Didnt Know that either .... (¿Quién dijo novato?) .Gracias. –

4

En el SDK más nuevo, use la opción --application = dev ~ your-app.

0

Recientemente tuve el mismo problema, por lo tanto, he creado un script para hacer esto:

APP=$1 #your app name 
IN=$2 #the file containing the data to upload 
DIR=$3 #the folder containing your app.yaml 
appcfg.py upload_data [email protected] --passin --application=dev~$APP --filename=$IN --url=http://localhost:8080/_ah/remote_api $DIR -v 
Cuestiones relacionadas