2009-08-11 16 views
5

Vorrei chiedere quale tipo di credenziali ho bisogno di mettere su per importare i dati utilizzando la classe di Google App Engine BulkLoaderQuali credenziali devo inserire per Google App Engine BulkLoader sul server di sviluppo?

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

E poi mi chiede le credenziali:

Inserisci le credenziali di accesso per localhost

Ecco un estrazione del contenuto del models.py, io uso questo file 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] 

Ogni tenta di inserire il risultato email e la password in "Autenticazione non riuscita", quindi non ho potuto importare i dati al server di sviluppo.

Non penso di avere alcun problema con i miei file né i miei modelli perché ho caricato correttamente i dati nell'applicazione appspot.com.
Quindi, cosa devo inserire per le credenziali localhost?
Ho anche cercato di usare Eclipse con Pydev ma ho ancora ricevuto lo stesso messaggio :(
Ecco l'output:

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 

Grazie

risposta

4

vi consiglio di seguire il consiglio dato here , e cito:

aggiungere questo al file di app.yaml:

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

Si noti che se si esegue sulla macchina sviluppo locale, commentare fuori login ultima riga: admin in modo che non hanno bisogno di una credenziale per eseguire il bulkloader.

(il mio accento).

+0

grazie Alex! tuttavia, attualmente sto affrontando un nuovo problema, non posso eseguire alcun comando dalla mia app della riga di comando (windows cmd), ogni volta che eseguo il file .py, mostra sempre il file della guida,: -s sono bloccato qui. Pensando di cambiare lo sviluppo in eclissi di Notpad2 e cmd: -s –

+0

@Hoang, mi sembra che il problema dovrebbe andare in una domanda separata, in quanto è molto diverso da questo. –

+0

ciao Alex, grazie per i tuoi suggerimenti!Sto preparando la nuova domanda per chiederlo di nuovo: D –

0

successivo ha lavorato per me:

  • rimuovere la linea

    login:admin 
    

    da app.YAML

  • Aggiornamento App cofig:

    appcfg.py update [app-id] 
    
  • (Re) a partire server locale:

    appserver [app-id] 
    
  • Upload dati:

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

    Chiedi per mail e password digitare nulla

3

Edit: Vedi la mia nuova soluzione

Questo problema è ancora presente. Ho aperto a ticket per chiedere se l'autenticazione potrebbe essere aggirata sul server dev locale. Si prega di votare per questo problema in modo da poterlo risolvere [rapidamente].

sono stato in grado di caricare i dati al server dev da:

  • lasciando il "login: admin" la linea in app.yaml
  • aggiungendo "[email protected]" al comando
  • premendo Invio quando viene richiesta una password (non richiesto)

Lasciare il "login: admin" la linea è una buona cosa, in quanto non sarà caricare il tuo applicazione sui server di produzione, senza questa linea , che potrebbe si esporre a qualcuno l'aggiunta di dati al datastore ...

Blockquote

2

Sì, commentare il requisito di amministrazione per il remote_api:

[app.yaml]

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

Quindi eseguire questo comando:

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

Nota: verificare che --auth_domain venga passato e che venga passata la porta corretta per localhost.

1

È necessario creare prima una credenziale di amministratore nel proprio server di sviluppo locale.

Con il tuo firefox (o chrome safari, ecc.), Apri http://localhost:8178/remote_api, ti verrà chiesto di accedere (senza password), inserire un'e-mail come login e spuntare la casella login as administrater, login. Questo ti creerà una credenziale di amministratore locale per te, usala quando esegui il caricamento di massa localmente.

Si applica ad altri accessi locali richiesti dall'amministratore.

Lasciare (o commentare) login:admin è una cattiva pratica, dal momento che è possibile distribuirlo anche in produzione. Stai attento!

+0

in realtà, rimuovendo l'accesso: la linea di amministrazione non è necessaria. specificare l'indirizzo email è sufficiente. Il mio vero problema era un 404, e ho scoperto questo pomeriggio che si trattava solo di un problema di ordinamento con le righe dell'URL in app.yaml. l'URL /.* dovrebbe essere l'ultimo, come ho scoperto. Grazie per il follow-up però. –

6

EUREKA: ho trovato il modo di utilizzare lo strumento bulkloader.py senza dover inserire manualmente le credenziali di accesso.

Ecco le 2 fasi:


impostare il proprio file di app.yaml up. Esempio:

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

si dovrebbe mettere PRIMA vostra linea - url: .* in app.yaml, altrimenti non sarai mai accedere al /remote_api URL.

Si noti che ho lasciato la parte login: admin, come la rimozione è una pratica molto male, dal momento che si potrebbe implementare che in produzione ...


2 lancio questo comando (adattarlo alle proprie esigenze).

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 . 

Il trucco è quello di utilizzare la combinazione di questi 2 parametri:

  • --email= (si può mettere qualsiasi indirizzo di posta elettronica che vuoi, io uso [email protected])
  • --passin

Specificando --email= si sopprimerà il prompt "inserisci credenziali" e --passin consentirà di leggere il password stdin (è lì che la echo 'XX' | entra in gioco!)


Enjoy!

P.S .: Non dimenticare di votare in modo che Google possa fornire un modo più semplice per farlo: Issue 2440.

+0

Se avessi dei punti extra da regalare, lo farei. Grazie mille! –

1

uso comanda per trasferire dati da locale a server remoto. L'estensione del file (json) è importante. Framework: django-nonrel, os: Win7.

manage.py dumpdata >dump.json 
manage.py remote loaddata dump.json 
Problemi correlati