Какие учетные данные следует указать для Google App Engine BulkLoader на сервере разработки? - PullRequest
5 голосов
/ 11 августа 2009

Я хотел бы спросить, какие учетные данные мне нужно указать для импорта данных с помощью класса BulkLoader для Google App Engine

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

И тогда он просит у меня полномочия:

Пожалуйста, введите учетные данные для входа локальный

Вот извлечение содержимого файла models.py, я использую этот listcountries.csv file

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] 

Каждая попытка ввести адрес электронной почты и пароль приводит к «Ошибка аутентификации», поэтому я не могу импортировать данные на сервер разработки.

Я не думаю, что у меня есть какие-либо проблемы с моими файлами и моими моделями, потому что я успешно загрузил данные в приложение appspot.com.
Так что я должен вставить для учетных данных localhost?
Я также пытался использовать Eclipse с Pydev , но все равно получал то же сообщение: (
Вот вывод:

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 foobar@nowhere.com: [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

Спасибо!

Ответы [ 9 ]

6 голосов
/ 04 февраля 2010

EUREKA: Я нашел способ использовать инструмент bulkloader.py без необходимости вручную вводить учетные данные для входа.

Вот 2 шага:


Установите файл app.yaml. Пример:

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

Вы должны поместить его ДО * - url: .* строки в app.yaml, иначе вы никогда не получите доступ к /remote_api url.

Обратите внимание, что я оставил часть login: admin, поскольку ее удаление ОЧЕНЬ ПЛОХО, так как вы можете развернуть ее в рабочей среде ...


2 Запустите эту команду (адаптируйте ее под свои нужды).

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

Хитрость заключается в том, чтобы использовать комбинацию этих двух параметров:

  • --email= (вы можете указать любой адрес электронной почты, который хотите, я использую foobar@nowhere.com)
  • --passin

Указание --email= подавит запрос «enter credentials», а --passin позволит прочитать пароль с stdin (вот где echo 'XX' | вступает в игру!)


Наслаждайтесь!

P.S .: Не забудьте проголосовать, чтобы Google мог предоставить более простой способ сделать это: Issue 2440 .

4 голосов
/ 12 августа 2009

Я рекомендую вам следовать совету здесь , и я цитирую:

добавить это в файл app.yaml:

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

Обратите внимание, что если вы запустите его на локальном машина разработки, комментируйте логин последней строки: admin, чтобы вы не нужны учетные данные для запуска bulkloader .

(мой акцент).

3 голосов
/ 20 декабря 2009

Редактировать: Посмотрите на мое новое решение

Эта проблема все еще присутствует. Я открыл тикет , чтобы спросить, можно ли обойти аутентификацию на локальном сервере разработчика. Пожалуйста, проголосуйте за эту проблему, чтобы мы могли ее решить [быстро].

Я смог загрузить данные на сервер разработчика:

  • оставив строку «login: admin» в app.yaml
  • добавление "--email=foobar@nowhere.com" к вашей команде
  • нажатие Enter при запросе пароля (ничего не требуется)

Оставлять строку «login: admin» - это хорошо, так как вы не сможете загрузить свое приложение на рабочие серверы без этой строки, что может привести к тому, что вы добавите данные в ваше хранилище данных ...

Blockquote

2 голосов
/ 27 марта 2014

Используйте aaa@gmail.com для имени пользователя.

Используйте a для пароля.

Это работает. Волшебно.

2 голосов
/ 23 декабря 2009

Да, закомментируйте требование администратора для remote_api:

[app.yaml]

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

Затем выполните эту команду:

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

Примечание: убедитесь, что --auth_domain передан, и правильный порт передан для localhost.

1 голос
/ 09 апреля 2012

Я использую эти команды для передачи данных с локального на удаленный сервер. Расширение файла (JSON) имеет важное значение. Framework: django-nonrel, os: Win7.

manage.py dumpdata >dump.json
manage.py remote loaddata dump.json
1 голос
/ 07 января 2010

Сначала необходимо создать учетные данные администратора на локальном сервере разработки.

С помощью Firefox (или Chrome Safari и т. Д.) Откройте http://localhost:8178/remote_api,, вам будет предложено войти в систему (без пароля), введите адрес электронной почты в качестве имени для входа и установите флажок login as administrater, войдите. Это создаст для вас учетные данные локального администратора, используйте его при массовой загрузке.

Это относится к другим администраторам требуется локальный доступ.

Оставлять (или комментировать) login:admin - это плохая практика, так как вы можете также развернуть это в рабочей среде. Береги себя!

0 голосов
/ 29 марта 2010

Другое решение - отключить функцию аутентификации с помощью лямбды: http://www.carlosble.com/?p=603

0 голосов
/ 16 ноября 2009

Следующее сработало у меня:

  • удаление строки

    login:admin
    

    из app.yaml

  • Обновление приложения cofig:

    appcfg.py update [app-id]
    
  • (Пере) запуск локального сервера:

    appserver [app-id] 
    
  • Загрузить данные:

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

    Запросите почту и пароль, введите что-нибудь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...