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!
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
Gracias por la explicación. No lo sabía. He probado el parámetro de Robert Kluin y también funciona bien. Mejor. –
La actualización al último SDK debería solucionar esto. –