0

我有一个简单的 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上面的右边似乎已经成功,但是有没有办法验证这一点?)。

查看源代码,我看到以下问题可能导致此错误:

  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()

这是一个相当大范围的问题......当然它不会告诉我是哪一个!再一次,奇怪的是“创造”似乎奏效了。

4

1 回答 1

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)
于 2012-11-02T23:30:59.393 回答