クライアントは、数週間前にまったく同じ問題を抱えていました。私は次の解決策を思いつきました:
- 持っている最新のバックアップを再生します (この場合は 1 年前のものです)。
- すべてのリクエストをプロダクションから一時データベースに移動する小さなパーサーを作成します(そのためにmongodbを選択しました):rakeタスクと「eval」を使用してハッシュを作成しました。
- 次の順序でデータを再生します
- オブジェクトがまだ存在しない場合は、オブジェクトの最初の作成で再生します。
- 最後の更新を (日付で) 見つけて再生します。
production.log をスキャンするための正規表現は次のとおりです。
file = File.open("location_of_your_production.log", "rb")
contents = file.read
contents.scan(/(Started POST \"(.*?)\" for (.*?) at (.*?)\n.*?Parameters: \{(.*?)\}\n.*?Completed (.*?) in (.*?)ms)/m).each do |x|
# now you can collect all the important data.
# do the same for GET requests as well, if you need it.
end
私の場合、一時データベースによってログファイルの解析プロセスが高速化されたため、上記の手順を実行できました。もちろん、production.log 経由で送信されなかったものはすべて失われます。また、オブジェクトの更新により情報全体が送信されますが、場合によっては異なる場合があります。画像は production.log でエンコードされた base64 で送信されたので、画像のアップロードを再作成することもできました。
幸運を!