Я создаю приложение Rails 3.2 в старой базе данных, которая также имеет некоторые сломанные записи в разных таблицах. Одна из проблем, которая дает большую головную боль, заключается в том, что она включает недопустимые даты.Как изящно обрабатывать «Mysql2 :: Ошибка: Недействительная дата» в ActiveRecord?
Я установил песочницу, которую я вручную установил один раз, чтобы заставить мой код работать. Теперь пришло время для развертывания. По этой причине песочница сбрасывается каждую ночь и копируется из живой базы данных, индексы хорьков перестраиваются, а миграция повторно применяется. Мы собираемся развертывать в песочнице часто, чтобы получить последние исправления, прежде чем приступать к установке в реальном времени.
Как приложение наследия PHP и это приложение новый Rails должен работать параллельно в течение нескольких недель до нескольких месяцев, мы не можем просто разовые исправить даты (Update: только для уточнения, это означает, что они работают на одна и та же база данных одновременно). Мне нужен способ автоматизировать это, возможно, с задачей миграции или грабли (я бы пошел за последним).
Но проблема в том, что ActiveRecord блокирует загрузку таких записей, поэтому у меня нет возможности исследовать запись и фиксировать даты по некоторым жестко закодированным предположениям, сделанным в ruby-коде.
Вторая проблема заключается в том, что у устаревшей базы данных имеются несоответствия, поскольку код PHP не использует транзакции, а некоторые кодовые пути разбиты и остаются сиротами и ограниченными ограничениями таблицы. Я буду иметь дело с этим, поскольку они происходят, большинство из них уже позаботились в моделях. Первая проблема связана с датами.
Как вы обычно это исправите? Возможно, есть даже какой-то волшебный камень, который поддерживает миграцию устаревших баз данных со сломанными записями, перехватывая исключения и запускающий некоторый код для исправления ...
Путь миграции использует MySQL и три производственные среды (стабильная с активной базой данных , постановка с той же базой данных и песочница с клонированием базы данных каждую ночь). Мы решили не делать одноразовое сопоставление/миграцию данных, потому что мы не можем заменить полное устаревшее приложение за один шаг (он состоит из CMS с около 50000 статьями, сотнями тем, огромной файловой базой с изображениями и загрузками, поддерживая около 10 веб-сайтов , около 12 лет данных и работы, беспорядочный PHP-код из разных навыков программирования, дублированный код с разных этапов миграции, вытягивание содержимого RSS с сайтов-партнеров для смешивания статей/сообщений оттуда в графиках статей в наших темах нашего приложения и много интересного ...
Первый шаг - перенести бэкэнд-приложение, чтобы получить согласованный интерфейс администрирования и публикации. Унаследованные интерфейсные приложения по-прежнему необходимо записывать в базу данных (комментарии и другой контент, созданный посетителями). процесс фиксации базы данных должен иметь возможность запускать без присмотра на регулярной основе ,
У нас уже есть исправления, которые изящно обрабатывают разбитые зависимости моделей в role_to и has_many. Интеграция Paperclip была разработана для работы со всеми фантастическими сопоставлениями имен файлов. И драгоценный камень airbrake сообщает о всех сбоях приложений в нашей установке redmine, поэтому мы получаем краткий обзор всех левых причуд.
Унаследованные приложения уже были изменены для работы с последней версией MySQL и были перенесены на текущий сервер базы данных MySQL.
Нет, на самом деле. Article.find (article_with_broken_date) выдает исключение, поэтому нет возможности исправить дату и сохранить запись снова. – hurikhan77