2013-07-11 1 views
0

У меня есть некоторые файлы, которые я получаю от API Evernote (через getResource) и запись в Google Cloud Storage с помощью следующего кода:App Engine для GCS | Выгрузка Выпуск

gcs_file = gcs.open(filename, 'w', content_type=res.mime, 
        retry_params=write_retry_params) 

# Retrieve the binary data and write to GCS 
resource_file = note_store.getResource(res.guid, True, False, False, False) 
gcs_file.write(resource_file.data.body) 

gcs_file.close() 

Для даже некоторых типов документов, он все еще работает. Но есть определенные документы, которые GCS бросками это в журналах:

Unable to fetch URL: https://storage.googleapis.com/evernoteresources/5db799f1-c03c-4056-812a-6d77bad55261/Sleep Away.mp3 

и

Got exception while contacting GCS. Will retry in 0.11 seconds. 

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

Любые идеи?


Вот полная трассировка стека, хотя я не уверен, что это поможет.

Encountered unexpected error from ProtoRPC method implementation: TimeoutError (('Request to Google Cloud Storage timed out.', DownloadError('Unable to fetch URL: https://storage.googleapis.com/evernoteresources/78413585-2266-4426-b08c-71d6c224f266/Evernote Snapshot 20130512 124546.jpg',))) 
Traceback (most recent call last): 
    File "/python27_runtime/python27_lib/versions/1/protorpc/wsgi/service.py", line 181, in protorpc_service_app 
    response = method(instance, request) 
    File "/python27_runtime/python27_lib/versions/1/google/appengine/ext/endpoints/api_config.py", line 972, in invoke_remote 
    return remote_method(service_instance, request) 
    File "/python27_runtime/python27_lib/versions/1/protorpc/remote.py", line 412, in invoke_remote_method 
    response = method(service_instance, request) 
    File "/base/data/home/apps/s~quinector/2a.368528733040360018/endpoints.py", line 61, in get_note_details 
    url = tools.registerResource(note_store, req.note_guid, r) 
    File "/base/data/home/apps/s~quinector/2a.368528733040360018/GlobalUtilities.py", line 109, in registerResource 
    retry_params=write_retry_params) 
    File "/base/data/home/apps/s~quinector/2a.368528733040360018/cloudstorage/cloudstorage_api.py", line 69, in open 
    return storage_api.StreamingBuffer(api, filename, content_type, options) 
    File "/base/data/home/apps/s~quinector/2a.368528733040360018/cloudstorage/storage_api.py", line 526, in __init__ 
    status, headers, _ = self._api.post_object(path, headers=headers) 
    File "/base/data/home/apps/s~quinector/2a.368528733040360018/cloudstorage/rest_api.py", line 41, in sync_wrapper 
    return future.get_result() 
    File "/python27_runtime/python27_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 325, in get_result 
    self.check_success() 
    File "/python27_runtime/python27_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 368, in _help_tasklet_along 
    value = gen.throw(exc.__class__, exc, tb) 
    File "/base/data/home/apps/s~quinector/2a.368528733040360018/cloudstorage/storage_api.py", line 84, in do_request_async 
    'Request to Google Cloud Storage timed out.', e) 
TimeoutError: ('Request to Google Cloud Storage timed out.', DownloadError('Unable to fetch URL: https://storage.googleapis.com/evernoteresources/78413585-2266-4426-b08c-71d6c224f266/Evernote Snapshot 20130512 124546.jpg',)) 
+1

Обе ошибки, которые вы опубликовали, имеют пробелы в дорожках. Это верно для всех случаев, когда вы видите ошибки? –

ответ

0

Это ошибка в коде клиента gcs. Он должен правильно обрабатывать имя файла. Тот факт, что он использует HTTP-запрос для GCS, должен быть «скрытым». Это будет исправлено в ближайшее время. Благодаря!

Обратите внимание, что если вы укажете имя файла самостоятельно, чтобы обойти эту ошибку, имя файла будет двойным кавычком после исправления. Сожалею.

0

Спасибо, Брайан! Проблема заключалась в пробелах в именах файлов. Я просто использовал urllib2.quote(), чтобы вытащить оттуда, и он работает как шарм.