Локальная загрузка файлов с помощью GSUtil

Кто-нибудь знает хороший способ загрузить набор файлов локально в эмулированное облачное хранилище Java dev_appserver.

Это не сработало:

$ gsutil rsync gs://mybucket http://localhost:8888/mybucket
InvalidUrlError: Unrecognized scheme "http".

Я открыт для предложений по следующим вопросам:

  1. Как загрузить кучу файлов локально (желательно через gsutil)
  2. Как указать мой локальный сервер dev_appserver на неэмулируемую корзину в Google

Это болезненно тестировать что-то локально без надлежащих данных. Я пытаюсь написать некоторые преобразования для загрузки данных в BigQuery (из резервных копий хранилища данных), и это невозможно без реальных данных.


person BK-    schedule 25.02.2015    source источник
comment
Чтобы скопировать данные в локальный каталог с помощью rsync, gsutil rsync -d /localdirgs://mybucket/data.   -  person Alex Martelli    schedule 25.02.2015
comment
Локальная копия не проблема, мне нужен способ загрузить это на мой dev_appserver.   -  person BK-    schedule 25.02.2015
comment
dev_appserver**.py** можно указать, какие каталоги использовать для локальных файлов, с помощью флагов командной строки, но, опять же, я недостаточно знаю Java, чтобы помочь.   -  person Alex Martelli    schedule 25.02.2015


Ответы (1)


«Как направить мой локальный dev_appserver на неэмулируемую корзину в Google»: это не так четко задокументировано, но реализовано в файлах dev_appserver и cloudstorage.

Чтобы убедиться в том, что я говорю, сначала svn checkout http://appengine-gcs-client.googlecode.com/svn/trunk/python gcs-client загрузите исходный код cloudstore на свой компьютер (вам нужно будет установить subversion, если у вас его еще нет, но это тоже бесплатно :-).

Затем cd gcs-client/src/cloudstorage/ и посмотрите на storage_api.py. В самой первой функции _get_storage_api строка документации говорит:

On dev appserver, this instance by default will talk to a local stub
unless common.ACCESS_TOKEN is set. That token will be used to talk
to the real GCS.

Итак, посмотрите на common.py, и снова в первой функции, set_access_token, вы увидите:

Аргументы: access_token: вы можете получить его, запустив «gsutil -d ls» и скопировав строку после «Bearer».

Итак, вот и все — в каждой записи вашего приложения (лучше всего в appengine_config.py в вашем корневом каталоге) импортируйте модуль common cloudstorage, затем **если и только если вы находитесь на dev_appserver[*] вызове

common.set_access_token('whatever_the_token')

используя в качестве строки аргумента ту, которую вы получите, запустив 'gsutil -d ls', сразу после Bearer, т.е. среди многого другого, вы заметите что-то вроде (подделка и сокращение фактического значения...:-):

Bearer xy15.WKXJQEzXPQQy2dt7qK9\r\n

в этом случае вы будете звонить

common.set_access_token('xy15.WKXJQEzXPQQy2dt7qK9')

[*] много способов узнать, находитесь ли вы на dev_appserver, например, см. GAE: код Python для проверки, нахожусь ли я на сервере dev_appserver или развернут в appspot .

person Alex Martelli    schedule 25.02.2015
comment
Алексей, спасибо за быстрый ответ, очень приятно. Я нашел предыдущие ответы на этот вопрос для Python, но не для Java. Извините, если это сбило с толку в моем вопросе, я попытался выделить его жирным шрифтом, чтобы было понятно. Знаете ли вы то же самое для Java SDK? - person BK-; 25.02.2015
comment
@BK-, извините, моя Java слаба - кто-то с сильным Java наверняка сможет найти аналогичный подход в исходниках Java SDK, как я нашел в исходниках Python SDK! Если вам нужны только ответы на Java, добавьте Java в свои теги. Таким образом, те из нас, кто слишком мало знает Java, будут знать, что не стоит пытаться вам помочь... - person Alex Martelli; 25.02.2015
comment
Спасибо за предложение Алекс. Добавил тег! :-) - person BK-; 25.02.2015
comment
@BK- Когда вы говорите, что нашли ответы на python, это был ваш второй вопрос или первый? Я также хочу предварительно загрузить некоторые данные GCS на свой сервер приложений для разработчиков, но не могу найти способ. - person Remko; 22.07.2015
comment
Никто не ответил. Извини! :( - person BK-; 23.07.2015