2011-06-24 12 views
2

私のデータストアでは、PlayerStatisticという名前の数百のエンティティをGamePlayRecordという名前に変更しました。デベロッパー・サーバーでは、Interactive Consoleに小さなスクリプトを書くことでこれを簡単に実行できました。ただし、アプリケーションがデプロイされると、Interactive Consoleはありません。Google App Engineデータストアのリファクタリング

代わりに、そのスクリプトをファイルにコピーし、ファイルをapp.yamlにリンクしました。私はスクリプトを展開し、一度実行してから削除するつもりです。しかし、別の問題が発生しました。つまり、スクリプトは30秒以上実行されています。スクリプトは完了する前に常に切り捨てられます。

私の解決策は、エンティティを1つずつ作成して削除するようにスクリプトを書き直すことになりました。こうすることで、タイムアウトしたときでも、スクリプトは中断したところから続けることができます。私は数百のエンティティしか持っていないので、これは約5回のリフレッシュを必要としました。

Google App Engineでワンタイムリファクタリングスクリプトを実行するより良い方法はありますか?これらのリファクタリングスクリプトを実行するために30秒の制限を回避する良い方法はありますか?

答えて

5

タスクキューを使用します。

タスクは、Web要求よりも長く実行できます。また、作業を複数のタスクに分割して並列実行し、より速く終了することもできます。タスクを完了すると、プログラムによって新しいタスクを挿入できるので、プロセス全体が自動化され、手動で更新する必要はありません。

+0

これは、deferredを使用してバックグラウンドで作業することに関するGoogle App Engineの記事につながった:http://code.google.com/appengine/articles/deferred.html – Kai

3

appengine-mapreduceは、データストアのリファクタリングを行うのに適しています。タスクコードを手作業で書くときには、面倒な細かい作業が必要です。

関連する問題