Хорошие миграции БД для CakePHP? - PullRequest
18 голосов
/ 26 марта 2010

Я пробовал несколько сценариев миграции для CakePHP, но столкнулся с проблемами со всеми из них в той или иной форме.

Пожалуйста, посоветуйте мне вариант миграции для Cake, который вы используете вживую и знаете, как работает.

Я бы хотел следующие "особенности":

  • Поддержка CakePHP 1.2 (например, миграция CakeDCs будет возможной только тогда, когда 1.3 стабильна, а мое приложение перенесено на новую кодовую базу)
  • Поддержка (или, по крайней мере, не остановка) моделей с другой конфигурацией базы данных.
  • Поддержка моделей в подпапках приложения / модели
  • Поддержка моделей в плагинах
  • Вспомогательные таблицы, которые не соответствуют соглашениям Cake (у меня есть несколько специальных таблиц, которые не имеют единственного поля первичного ключа и должны хранить их)
  • Хорошо играет с автоматическим развертыванием через Capistrano и Git.

Мне не нужны версионные файлы в стиле rails, которые подойдет для версионного файла схемы git, который сравнивается с существующей схемой. То есть: мне нравится SchemaShell в Cake, за исключением того, что он не совместим с большинством моих требований выше.

Я посмотрел и протестировал:

Ответы [ 5 ]

4 голосов
/ 31 марта 2010

Я постараюсь обновить эту "тему" своими выводами после быстрой попытки плагина Хуана и всех других упомянутых, кроме одного из CakeDC ..., так как у меня не обновлено соответствующее приложение для CakePHP 1.3 и этой миграции плагин требует 1,3

Я должен отметить, что комментарии о сбоях и плагинах, которые не работают для меня, следует читать в первую очередь как «не подходящие для МОИХ нужд» или «ошибки, которые я допустил, пытаясь их использовать». В какой-то степени некоторые могут читать такие комментарии как просьбу о пересмотре документации. Я не имею в виду, что протестированные плагины по своей природе имеют недостатки, глючат или сломаны. Я уверен, что все они работают при правильных обстоятельствах и для правильных рабочих процессов.

Оболочка схемы CakePHP

  • Имеет простую концепцию, которая мне нравится. Схема связана с кодом, а SCM используется для управления его ревизиями.

  • Прекрасно работает в точку. Эта точка:

  • Не подходит для автоматического развертывания. То есть Команда update может только изменять таблицы, но не обрабатывать новые или удаленные таблицы. Они обрабатываются их собственными командами оболочки, что усложняет развертывание в стиле Cap. Также запуск обновлений с новой таблицей приведет к ошибкам, когда скрипт попытается «изменить» несуществующую таблицу. Я уверен, если это намечено или у меня возникла проблема. (Спросили в гугл группе без ответа)

CakeDC миграций

  • Звучит так, будто они взяли оболочку схемы и "исправили" ее. Документы объясняют процедуру немного более сложной (чтобы объяснить, по крайней мере), но она может работать так, как я хочу.

ЯМЛ, миграция Джоулмосса и Хуана

  • Все они разделяют концепцию рельсов версионных файлов и «взлёта» и «сброса» между ними. Мне это нравится меньше, потому что я не вижу ситуации для моих проектов, когда миграция схемы будет обновлена ​​или откатана, не делая то же самое с исходным кодом. Я также могу жить без возможности переноса существующих данных в сценарии миграции, так как я предвижу это как очень редкое явление для меня.

  • Все это предполагает, что я не буду касаться базы данных другими способами, кроме сценариев миграции. Я не могу открыть свой любимый MySql-GUI и поиграть, пока я не буду счастлив, а затем сгенерировать «diff» с помощью этих сценариев. (По крайней мере, я не нашел документированных способов сделать это во время моих кратких тестов.) Я должен вручную записать изменения в файлы YAML или php. Поскольку я начинаю работу над существующим проектом с 30 таблицами, мне не нравится идея переписывать эту схему вручную. Но некоторые из этих плагинов не создали хорошую отправную точку для всех моих таблиц. Вероятно, это также было связано с моим кратким тестированием и / или невозможностью найти документацию для такой функции. Я не погружался в исходный код для большинства из них.

Мой следующий шаг - обновить мой проект до CakePHP 1.3 и попробовать последний плагин. Но я не знаю, когда у меня будет время для этого. (т.е. никто не задерживает дыхание)

Если вы считаете, что я неправильно понял, как работает любой из этих плагинов, и могу предложить, как заставить их работать на меня. Буду рад ответу на комментарий.

3 голосов
/ 09 мая 2012

Если вам нравится миграция Rails, используйте Rails Migrations ... взгляните на этот камень https://github.com/thuss/standalone-migrations. Я использую этот драгоценный камень с cakephp в своей повседневной работе.

2 голосов
/ 26 марта 2010

У меня есть плагин, который делает это для CakePHP 1.2, вы можете увидеть в http://github.com/jrbasso/migrations

Он использует стиль торта, чтобы сделать все. Не использует yaml, использует объекты для определения таблиц. Вы можете без проблем импортировать модели из Cake ...

1 голос
/ 29 июня 2012

Я использовал плагин CakeDC для миграции для 1.3.x и 2.x в производственных средах и был доволен. В версии 1.3.x есть некоторые ошибки, связанные с созданием миграций, но их легко исправить.

0 голосов
/ 06 октября 2016

Используйте плагин 3.x Migrations здесь.

Все проблемы, которые есть у других старых инструментов, исправлены в дизайне. И он находится в стадии интенсивного развития и получает больше функций и исправлений каждую неделю.

Вы также можете легко использовать новый инструмент для существующих приложений 1.x и 2.x. Я только что выпустил пост , как, кстати, использовать 3.x Миграции в 2.x приложениях .

...