У клиента точно такая же проблема была несколько недель назад. Я придумал следующее решение:
- воспроизведите последнюю резервную копию, которая у вас есть (в нашем случае это был один год
старый)
- написать небольшой анализатор, который перемещает все запросы из производства во временную базу данных (для этого я выбрал 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, будет потеряно. Кроме того, обновления объектов будут отправлять всю информацию, она может отличаться в вашем случае. Я также мог бы воссоздать загрузку изображений, так как изображения были отправлены в кодировке base64 в файле production.log.
удачи!