简单的App Engine + Google云端存储应用程序中的“存在错误”

时间:2012-11-01 16:25:26

标签: google-app-engine google-cloud-storage

我有一个简单的AppEngine处理程序,如下所示:

class TestGS(webapp2.RequestHandler):
    def get(self):

        file_name = '/gs/ds_stats/testfile'
        files.gs.create(file_name, mime_type='text/html')        

        with files.open(file_name, 'a') as file_handle:

            file_handle.write("foo")

        files.finalize(file_name)

但是,当我调用此处理程序时,我会在ExistenceError: ApplicationError: 105行获得with files.open(...

这看起来像一个超级简单的场景,并且根本没有迹象表明为什么会失败(特别是因为它上面的files.gs.create似乎已经成功,但是,有没有办法验证这一点? )。

查看source code,我发现以下问题可能导致此错误:

  if (e.application_error in
      [file_service_pb.FileServiceErrors.EXISTENCE_ERROR,
       file_service_pb.FileServiceErrors.EXISTENCE_ERROR_METADATA_NOT_FOUND,
       file_service_pb.FileServiceErrors.EXISTENCE_ERROR_METADATA_FOUND,
       file_service_pb.FileServiceErrors.EXISTENCE_ERROR_SHARDING_MISMATCH,
       file_service_pb.FileServiceErrors.EXISTENCE_ERROR_OBJECT_NOT_FOUND,
       file_service_pb.FileServiceErrors.EXISTENCE_ERROR_BUCKET_NOT_FOUND,
       ]):
    raise ExistenceError()

这是一个非常广泛的问题...当然它并没有告诉我哪一个!再次,奇怪的是'创造'似乎有效。

1 个答案:

答案 0 :(得分:2)

问题证明文件中缺乏明确性。 files.gs.create会返回一个特殊的“可写文件路径”,您需要将其输入openfinalize。一个正确的例子如下:

class TestGS(webapp2.RequestHandler):
    def get(self):

        file_name = '/gs/ds_stats/testfile'
        writable_file_name = files.gs.create(file_name, mime_type='text/html')        

        with files.open(writable_file_name, 'a') as file_handle:

            file_handle.write("foo")

        files.finalize(writable_file_name)