2009-08-11 13 views
5

me gustaría preguntar qué tipo de credenciales necesito para poner en para importar datos con la clase Google App Engine BulkLoader¿Qué credenciales debo poner para Google App Engine BulkLoader en el servidor de desarrollo?

appcfg.py upload_data --config_file=models.py --filename=listcountries.csv --kind=CMSCountry --url=http://localhost:8178/remote_api vit/ 

Y entonces me pide credenciales:

Por favor, introduzca credenciales de acceso para localhost

Aquí es una extracción del contenido de la models.py, utilizo este archivo listcountries.csv

class CMSCountry(db.Model): 
    sortorder = db.StringProperty() 
    name = db.StringProperty(required=True) 
    formalname = db.StringProperty() 
    type = db.StringProperty() 
    subtype = db.StringProperty() 
    sovereignt = db.StringProperty() 
    capital = db.StringProperty() 
    currencycode = db.StringProperty() 
    currencyname = db.StringProperty() 
    telephonecode = db.StringProperty() 
    lettercode = db.StringProperty() 
    lettercode2 = db.StringProperty() 
    number = db.StringProperty() 
    countrycode = db.StringProperty() 

class CMSCountryLoader(bulkloader.Loader): 
    def __init__(self): 
    bulkloader.Loader.__init__(self, 'CMSCountry', 
          [('sortorder', str), 
          ('name', str), 
          ('formalname', str), 
          ('type', str), 
          ('subtype', str), 
          ('sovereignt', str), 
          ('capital', str), 
          ('currencycode', str), 
          ('currencyname', str), 
          ('telephonecode', str), 
          ('lettercode', str), 
          ('lettercode2', str), 
          ('number', str), 
          ('countrycode', str) 
          ]) 
loaders = [CMSCountryLoader] 

Cada intento de ingresar el correo electrónico y la contraseña da como resultado "Autenticación fallida", por lo que no pude importar los datos al servidor de desarrollo.

No creo que tenga ningún problema con mis archivos ni mis modelos porque he cargado correctamente los datos a la aplicación appspot.com.
¿Qué debo agregar para las credenciales de localhost?
también traté de utilizar Eclipse con PyDev pero yo todavía tengo el mismo mensaje :(
Aquí está la salida:

Uploading data records. 
[INFO ] Logging to bulkloader-log-20090820.121659 
[INFO ] Opening database: bulkloader-progress-20090820.121659.sql3 
[INFO ] [Thread-1] WorkerThread: started 
[INFO ] [Thread-2] WorkerThread: started 
[INFO ] [Thread-3] WorkerThread: started 
[INFO ] [Thread-4] WorkerThread: started 
[INFO ] [Thread-5] WorkerThread: started 
[INFO ] [Thread-6] WorkerThread: started 
[INFO ] [Thread-7] WorkerThread: started 
[INFO ] [Thread-8] WorkerThread: started 
[INFO ] [Thread-9] WorkerThread: started 
[INFO ] [Thread-10] WorkerThread: started 
Password for [email protected]: [DEBUG ] Configuring remote_api. url_path = /remote_api, servername = localhost:8178 

[DEBUG ] Bulkloader using app_id: abc 
[INFO ] Connecting to /remote_api 
[ERROR ] Exception during authentication 
Traceback (most recent call last): 
    File "D:\Projects\GoogleAppEngine\google_appengine\google\appengine\tools\bulkloader.py", line 2802, in Run 
request_manager.Authenticate() 
    File "D:\Projects\GoogleAppEngine\google_appengine\google\appengine\tools\bulkloader.py", line 1126, in Authenticate 
remote_api_stub.MaybeInvokeAuthentication() 
    File "D:\Projects\GoogleAppEngine\google_appengine\google\appengine\ext\remote_api\remote_api_stub.py", line 488, in MaybeInvokeAuthentication 
datastore_stub._server.Send(datastore_stub._path, payload=None) 
    File "D:\Projects\GoogleAppEngine\google_appengine\google\appengine\tools\appengine_rpc.py", line 344, in Send 
f = self.opener.open(req) 
    File "C:\Python25\lib\urllib2.py", line 381, in open 
response = self._open(req, data) 
    File "C:\Python25\lib\urllib2.py", line 399, in _open 
'_open', req) 
    File "C:\Python25\lib\urllib2.py", line 360, in _call_chain 
result = func(*args) 
    File "C:\Python25\lib\urllib2.py", line 1107, in http_open 
return self.do_open(httplib.HTTPConnection, req) 
    File "C:\Python25\lib\urllib2.py", line 1082, in do_open 
raise URLError(err) 
URLError: <urlopen error (10061, 'Connection refused')> 
[INFO ] Authentication Failed 

Gracias

Respuesta

4

le recomiendo que siga las indicaciones dadas here , y cito:

añadir esto a app.yaml archivo:

-- url: /loadusers 
script: myloader.py 
login: admin 

Tenga en cuenta que si se ejecuta en la máquina desarrollo local, comentario de la entrada última línea: admin para que no necesitan una credencial para ejecutar el bulkloader.

(mi énfasis).

+0

gracias Alex! sin embargo, ahora estoy enfrentando un nuevo problema, no puedo ejecutar ningún comando desde mi aplicación de línea de comando (cmd de Windows), cada vez que ejecuto el .py, siempre aparece el archivo de ayuda: -s Estoy atrapado aquí. Pensando en cambiar el desarrollo a eclipse en lugar de notpad2 y cmd: -s –

+0

@Hoang, me parece que el problema debería ir en una pregunta aparte, ya que es muy diferente de este. –

+0

hola Alex, ¡gracias por tus sugerencias!Estoy preparando la nueva pregunta para volver a preguntar: D –

0

A continuación trabajó para mí:

  • quitando la línea

    login:admin 
    

    de aplicación.yaml

  • Actualizando aplicación COFIG:

    appcfg.py update [app-id] 
    
  • (Re) a partir servidor local:

    appserver [app-id] 
    
  • carga de datos:

    appcfg.py upload_data --config_file=album_loader.py --filename album_data.csv --kind Album --url=http://localhost:8080/remote_api ../[app-id] 
    

    Pedir electrónico y contraseña escribir nada

3

Editar: Mira mi nueva solución

Este problema es todavía presente. Abrí el a ticket para preguntar si la autenticación podría anularse en el servidor local de desarrollo. Vota por este tema para que podamos resolverlo [rápidamente].

he sido capaz de cargar datos en el servidor dev por:

  • salir de la "entrada: admin" en la línea de app.yaml
  • añadiendo "[email protected]" a su comando
  • pulsar Intro cuando se le solicite una contraseña (no requerido)

Saliendo de la "entrada: admin" línea es una buena cosa, ya que no se cargue su aplicación en los servidores de producción sin esta línea , Cual podría exponerlo a alguien a añadir datos al almacén de datos ...

cita en bloque

2

Sí, comente el requisito de administración para la remote_api:

[app.yaml]

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

A continuación, ejecute este comando:

 
$ bulkloader.py --dump --kind=DbMyKind --url= http://localhost:8080/remote_api --filename=export.csv --app_id=my_appid --auth_domain=localhost:8080 

Nota: compruebe que se pasa --auth_domain y se pasa el puerto adecuado para localhost.

1

Primero necesita crear una credencial de administrador en su servidor de desarrollo local.

Con su Firefox (o Chrome Safari, etc.), abra http://localhost:8178/remote_api, se le pedirá que inicie sesión (sin contraseña), ingrese un correo electrónico como inicio de sesión y marque la casilla login as administrater, inicie sesión. Esto le creará una credencial de administrador local, utilícela cuando realice una carga masiva localmente.

Se aplica a otro administrador de acceso local requerido.

Dejar (o comentar) login:admin es una mala práctica, ya que también podría implementarla en la producción. ¡Cuídate!

+0

en realidad, eliminando el inicio de sesión: la línea de administrador no es necesaria. especificar la dirección de correo electrónico es suficiente. Mi verdadero problema fue un 404, y descubrí esta tarde que era solo un problema de pedido con las líneas de URL en la aplicación.yaml. la URL /.* debería ser la última, como descubrí. Gracias por el seguimiento sin embargo. –

6

EUREKA: Encontré la manera de utilizar la herramienta bulkloader.py sin tener que ingresar manualmente las credenciales de inicio de sesión.

Éstos son los 2 pasos:


configurar su archivo app.yaml arriba. Ejemplo:

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

usted debe poner antes de que su línea de - url: .* en app.yaml, de lo contrario nunca se accede a la URL /remote_api.

Tenga en cuenta que he dejado la parte login: admin, ya que la eliminación es una práctica muy malo, ya que podría implementar esto en la producción ...


2 Lanzamiento de este comando (adaptarlo a sus necesidades)

echo 'XX' | python2.5 ../google_appengine/bulkloader.py --dump --kind=NAMEOFMODEL --url=http://localhost:8080/remote_api --filename=FILENAME --app_id=APPID [email protected] --passin . 

El truco es utilizar la combinación de estos 2 parámetros:

  • --email= (puedes poner el que sea dirección de correo electrónico que desea, yo uso [email protected])
  • --passin

Al especificar --email=, se suprimirá el mensaje "ingrese las credenciales", y --passin permitirá leer el contraseña de stdin (que es donde la echo 'XX' | entra en juego!)


disfrutar!

P.S .: No olvide votar para que Google pueda proporcionar una forma más fácil de hacerlo: Issue 2440.

+0

Si tuviera puntos extra para regalar, lo haría. Muchas gracias! –

1

utilizo este comandos para transferir datos desde el local al servidor remoto. La extensión del archivo (json) es importante. Marco: django-nonrel, os: Win7.

manage.py dumpdata >dump.json 
manage.py remote loaddata dump.json 
Cuestiones relacionadas