1

내 응용 프로그램이 gae에 배포 될 때 gcs에 액세스 할 수 있지만 개발 중에 내 로컬 컴퓨터에서 gcs에 액세스하려고합니다. 이 일을 어떻게 하죠?로컬 Python 앱에서 Google 클라우드 저장소에 액세스하려면 어떻게해야합니까?

Traceback (most recent call last): 
    File "/Users/alvinsolidum/Downloads/google_appengine/google/appengine/runtime/wsgi.py", line 267, in Handle 
    result = handler(dict(self._environ), self._StartResponse) 
    File "/Users/alvinsolidum/Downloads/google_appengine/lib/webapp2-2.3/webapp2.py", line 1519, in __call__ 
    response = self._internal_error(e) 
    File "/Users/alvinsolidum/Downloads/google_appengine/lib/webapp2-2.3/webapp2.py", line 1511, in __call__ 
    rv = self.handle_exception(request, response, e) 
    File "/Users/alvinsolidum/Downloads/google_appengine/lib/webapp2-2.3/webapp2.py", line 1505, in __call__ 
    rv = self.router.dispatch(request, response) 
    File "/Users/alvinsolidum/Downloads/google_appengine/lib/webapp2-2.3/webapp2.py", line 1253, in default_dispatcher 
    return route.handler_adapter(request, response) 
    File "/Users/alvinsolidum/Downloads/google_appengine/lib/webapp2-2.3/webapp2.py", line 1077, in __call__ 
    return handler.dispatch() 
    File "/Users/alvinsolidum/Downloads/google_appengine/lib/webapp2-2.3/webapp2.py", line 547, in dispatch 
    return self.handle_exception(e, self.app.debug) 
    File "/Users/alvinsolidum/Downloads/google_appengine/lib/webapp2-2.3/webapp2.py", line 545, in dispatch 
    return method(*args, **kwargs) 
    File "/Users/alvinsolidum/Documents/fallsafety-dataflow/preprocess/main.py", line 74, in get 
    self.to_csv() 
    File "/Users/alvinsolidum/Documents/fallsafety-dataflow/preprocess/main.py", line 41, in to_csv 
    compressed_flo = gcs.open(read_filepath, 'r') 
    File "/Users/alvinsolidum/Documents/fallsafety-dataflow/preprocess/lib/cloudstorage/cloudstorage_api.py", line 103, in open 
    offset=offset) 
    File "/Users/alvinsolidum/Documents/fallsafety-dataflow/preprocess/lib/cloudstorage/storage_api.py", line 249, in __init__ 
    errors.check_status(status, [200], path, resp_headers=headers, body=content) 
    File "/Users/alvinsolidum/Documents/fallsafety-dataflow/preprocess/lib/cloudstorage/errors.py", line 132, in check_status 
    raise NotFoundError(msg) 
NotFoundError: Expect status [200] from Google Storage. But got status 404. 
Path: '/fallsafety-test-general/apple-watch/continuous/active/54d0044919e92b0c00c29555-29391CEA593C4D798A1EA08BD23DA47E-0002-continuous.csv.gz'. 
Request headers: None. 
Response headers: {'date': 'Mon, 29 Aug 2016 23:15:49 GMT', 'server': 'Development/2.0', 'connection': 'close'}. 
Body: ''. 
Extra info: None. 

답변

2

아 파이썬의에서 appengine-GCS-클라이언트를 사용하고있는 것 같습니다 : 내가 GCS에서 파일을 열려고하면 다음

내가 얻을 역 추적입니다. 로컬 개발 서버에서 실행될 때 클라이언트는 기본적으로 GCS의 로컬 위조 버전을 사용합니다 ("Server : Development/2.0"응답 헤더 참조). 로컬 가짜에 업로드하지 않은 실제 GCS 객체를 찾고 있다고 생각합니다.

다른 라이브러리 (gcloud-python은 정말 좋음)를 사용하여 서버 초기화의 일부로 문제의 객체를 업로드하거나 SERVER_SOFTWARE를 설정하여 할 수있는 로컬 가짜를 비활성화하여이 문제를 해결할 수 있습니다 환경 변수 :

# Logic for whether to use local fake is here: https://github.com/GoogleCloudPlatform/appengine-gcs-client/blob/f9dbbd43ec431f739aa33a44cf24d32a19579f33/python/src/cloudstorage/common.py#L387 
os.environ['SERVER_SOFTWARE'] = 'Development (remote_api)/1.0' 
관련 문제