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

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

Для этой статьи я предполагаю, что вы используете заболоченное место с SailsJS с плагином паруса-крюк-заболоченное место. Вы все еще можете следовать указаниям, если в вашем проекте настроен devMigrations. Я также предполагаю, что у вас установлен wetland-cli. Наконец, я предполагаю, что вы знаете, что такое миграция базы данных и почему это одна из многих причин использовать Wetland.

Время быть крутым

Сегодня четверг. 11:26 утра. Вы только что приготовили вторую чашку кофе, чтобы начать работу над следующей грандиозной функцией для вашего убийственного приложения Node.JS. Вы надеваете наушники. Пора взламывать ...

Итак, вы находитесь в главной ветке. Вы начинаете работу над новой функцией / исправлением / чем угодно. Что мы делаем? Создайте новую ветку. Конечно.

… Итак, вы создаете новую ветку. gco -b feat/article.

Примечание. Я слышу, как вы думаете: Что? gco? Что это? . Что ж, мой дорогой студент, это псевдоним, предоставленный git plugin для oh-my-zsh. Возьми. Используй это. Люблю это нежно. Во всяком случае, это сокращение от git checkout.

Затем вы создаете новый снимок водно-болотного угодья: wetland snapshot create (эта команда использует имя ветки git, если вы сами не указываете имя. Это соглашение, поэтому вы пока не указываете имя) .

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

Побочный шаг: миграция разработчиков и снимки состояния

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

Что такое снимок? Что ж, снимки состояния фиксируют состояние ваших сопоставлений в сжатый файл, который впоследствии можно использовать для сравнения с другими снимками и восстановления состояния. Другими словами, это то, как выглядит ваше определение схемы в данный момент времени, которое затем можно использовать для сравнения с вашей схемой в другой.

Что делают dev-migrations, на самом деле создают снимок при каждой успешной миграции dev. Посмотрите каталог .data/ . Есть каталог snapshots/ и dev_snapshots/.

Снимки для разработчиков создаются автоматически. Вам не нужно ничего для этой функции (то есть, при использовании sails-hook-wetland. При настройке самостоятельно, обязательно вызывайте devMigrations при запуске вашего сервера. ).

При следующем запуске сервера он сравнит предыдущий (dev) снимок с новым, вычислит, какие изменения нужно внести, обновит базу данных, создаст новый снимок dev и запустит сервер.

Промыть и повторить. Это будет происходить каждый раз, когда вы запускаете свой сервер.

Вернуться к надрать задницу

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

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

Здесь вам пригодится ваш снимок. Итак, чтобы уточнить, это ваш снимок, созданный вами после создания ветки, а не снимок разработчика.

Итак, теперь вы запускаете wetland migrator create (опять же, если вы не укажете имя, он будет использовать имя ветки и найдет ваш снимок).

Это будет делать то же самое, что и миграции разработчиков. Он будет отличать текущий (последний) снимок от созданного вами, вычислит изменения, сгенерирует код и запишет файл. Затем вы захотите проверить свой файл миграции и убедиться, что все, что он сгенерировал, правильно.

Проверяем круто

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

Чтобы начать это, вы можете использовать команду revert, предоставленную wetland-cli. Что действительно удобно! Это отменит все dev_migrations, которые он сделал во время кодирования. Запустите его: wetland migrator revert (опять же, если вы не укажете имя, он будет использовать имя вашей ветки). После этого ваша база данных будет иметь состояние, в котором вы начали разработку в этой ветке. Когда вы создали снимок.

Теперь вы можете запустить миграцию, используя wetland migrator up -r (сначала проверьте статус, используя wetland migrator status, а проверяйте запросы, используя wetland migrator up -d), протестируйте его, и, если он работает, запустите down, используя wetland migrator down -r. Если все прошло успешно, то вперед. У вас должна быть возможность снова запустить up, чтобы поддерживать свою схему в актуальном состоянии, или просто снова запустить сервер, чтобы дать водно-болотным угодьям это выяснить.

О, дерьмо .. Я облажался

Если вы в какой-то момент ошибетесь, и ваша база данных обновлена, но ваш dev_snapshot все еще застрял в своем старом состоянии, вы получите странную ситуацию:

Wetland попытается обновить схему вашей базы данных на основе разницы между последним dev_snapshot и текущим снимком. Это приведет к ошибкам, потому что ваша база данных уже обновлена.

Чтобы решить эту проблему, просто запустите wetland migrator forward. Это скажет Wetland обновить файл dev_migration без изменения схемы вашей базы данных, чтобы снова обновить ее с фактическим состоянием базы данных. Все хорошо!

Дополнительная информация

При работе в команде и обновлении (извлечение последних изменений из апстрима) вы можете, нет, столкнетесь с ситуацией, когда ваш коллега добавил новую миграцию. В таком случае вы не хотите запускать миграции разработчиков. Если вы это сделаете, это приведет к тому, что любые миграции, которые вы сами создаете, не будут тестироваться (потому что у вас есть невыполненная миграция, принадлежащая вашему коллеге).

Если вы оказались в такой ситуации, вы можете решить ее:

1. Запуск миграции, добавленной вашим коллегой: wetland migrator latest
2. Обновление локального снимка состояния разработчика: wetland migrator forward

Ваша база данных будет обновлена, и ваши снимки разработчика не нанесут вреда вашей базе данных. Вы можете пойти и добавить в проект больше добра без каких-либо проблем.

Заключение

Как я уже сказал, Болото надрывает задницу.

Я надеюсь, что это руководство поможет вам управлять своими миграциями так, как они были задуманы. Я обнаружил, что очень развлекаюсь, объясняя миграцию водно-болотных угодий, поэтому решил написать об этом здесь. Вопросов? Не стесняйтесь спрашивать их!