2013-04-03 4 views
5

ファイルをアップロードしようとすると、GoogleドライブREST APIが500:内部サーバーエラーを返すことがあります。これらのエラーのほとんどは実際にアップロードに成功したものです。後で重複が表示されるようにGoogleの推奨事項に従ってアップロードを再試行します。GoogleドライブSDK - 500:内部サーバーエラー:ほとんどの場合、ファイルは正常にアップロードされます

これらのエラーを伝える推奨される方法は何ですか?

答えて

-2

標準エラー処理は、ここで説明されていますhttps://developers.google.com/drive/handle-errors

しかし、500エラーはそれほどログ情報を追加し、Googleがあなたのために、この問題をデバッグするために見ることができますしてください、決して起こらないはずです。ありがとう。

+0

私は500を取得したときに応答全体を記録し、見つかったときに応答します。 – Rajiv

+0

これに投票してください - 同じ問題が発生しましたhttp://stackoverflow.com/questions/19769000/google-drive-uploading-file-size-limit –

+0

解決済み - 前のコメントを参照してください。 MIMEタイプを確認し、Content-Type:applicatio/octet-streamでファイルをアップロードしてみてください。ファイル変換でGoogleDriveが失敗することがあります。 –

0

Google's documentationは、これが内部エラーであり、修正できる特定のエラーではないことを示しているようです。彼らは基本的には増加する間隔で機能を再試行しているexponential backoffを使用することを提案します。

たとえば、関数が失敗します。 2秒待ってからもう一度お試しください。失敗した場合は、4秒待ってください。その後、8秒、16、32などとなります。ギャップが大きくなると、サービスの権利がますます増えることになります。あなたの必要に応じて、最終的に時間を上限にして、停止するまでに最大10分待つことができます。

retryingパッケージは、これに非常に適しています。 from retrying import retryにすることができますし、再試行する必要がある関数のデコレータとしてretryを使用します。ここでは私の例です:

@retry(wait_exponential_multiplier=1000, wait_exponential_max=60*1000, stop_max_delay=10*60*1000) 
def find_file(name, parent=''): 
    ... 

あなただけの関数宣言の前に@retryを配置する必要がありデコレータを使用するには。 retry()を使うことができますが、タイミングの仕方を調整するために渡すことができるオプションのパラメータがあります。私は試しの間の待ち時間の増加を調整するためにwait_exponential_multiplierを使います。 wait_exponential_maxは、試行の間に待機できる最大時間です。 stop_max_delayは、例外が発生する前に再試行する時間です。すべての値はミリ秒単位です。

関連する問題