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 に答える