トラブルシューティング
wrangler dev と wrangler tail は、Durable Objects のデバッグを支援するために利用できます。
wrangler dev コマンドは、ローカル開発環境から Cloudflare のグローバルネットワークへのトンネルを開き、Durable Objects コードを記述しながら Workers 環境でテストすることを可能にします。
wrangler tail は、Worker コードによって提供される各リクエストのコンソールおよび例外ログのライブフィードを表示します。これには、通常の Worker リクエストと Durable Object リクエストの両方が含まれます。npx wrangler deploy を実行した後、Worker プロジェクトのルートディレクトリで wrangler tail を使用し、Worker URL にアクセスすることで、ターミナルでコンソールおよびエラーログを見ることができます。
wrangler.toml ファイルで、dir と main のエントリが Worker コードを含む正しいファイルを指していることを確認し、ES モジュール構文を使用している場合はファイル拡張子が .mjs であることを確認してください。
npx wrangler deploy --delete-class <ClassName> を使用してマイグレーションを削除する際に、次のエラーが発生することがあります: "Cannot apply --delete-class migration to class <ClassName> without also removing the binding that references it"。--delete-class を再度適用する前に、wrangler.toml の [durable_objects] の下にある対応するバインディングを削除する必要があります。
Durable Object の単一インスタンスは、単一スレッドで可能な作業以上のことを行うことはできません。これらのエラーは、Durable Object が受信リクエストに追いつくための作業が多すぎることを意味します:
Error: Durable Object is overloaded. Too many requests queued.キューにあるリクエストの合計数が多すぎます。Error: Durable Object is overloaded. Too much data queued.キューにあるリクエストのデータの合計サイズが大きすぎます。Error: Durable Object is overloaded. Requests queued for too long.最も古いリクエストがキューに長時間留まっています。
このエラーを解決するには、リクエストごとの作業を減らすか、リクエストの数を減らすことができます。たとえば、リクエストをより多くの Durable Object インスタンスに分散させることができます。
これらのエラーや過負荷によるその他のエラーは、例外に .overloaded プロパティ が設定されており、過負荷の操作を再試行しないようにするために使用できます。
新しい Durable Objects を 作成したり、異なる既存の Durable Objects を検索したりする 速度には制限があります。これらの検索は通常キャッシュされているため、最近アクセスされた Durable Objects の同じセットに対する試行は成功するはずです。このエラーをキャッチして短い待機の後に再試行することは安全です。可能であれば、これらの検索を複数のリクエストに分散させることも検討してください。
エラーメッセージのリセットは、メモリ内の状態を指します。state.storage を介してすでに正常に永続化された耐久性のある状態には影響しません。
グローバルユニーク性を参照してください。
無限ブロックを防ぐために、ストレージ操作にかかる時間には制限があります。十分に多くのキーと値のペアを含む Durable Objects では、deleteAll() がその時間制限に達して失敗する可能性があります。この場合、各 deleteAll() 呼び出しは進行しており、成功するまで再試行することは安全です。そうでない場合は、Cloudflare サポート に連絡してください。
バックオフの提案されたアプローチに加えて、可能な場合は、複数の個別の state.storage.get(key) 呼び出しの代わりに state.storage.get(keys Array<string>) を使用するようにコードを変更することも検討してください。