#git #веб_программирование
Есть локальный гит репо который деплоиться на хостинг, каким образом можно так же
и деплоить базу данных?
Ответы
Ответ 1
Такого понятия как "деплой базы данных" не существует. Применяется либо восстановление всей базы из резервной копии (эту операцию выполняют системные администраторы при первичном развёртывании сайта, либо при переносе продакшн сервера на другое место, реже -- при восстановлении работы сайта, тогда можно ограничиться лишь некоторыми таблицами), либо изменение схемы данных. Выше приводился пример для C# на базе фреймворка Entity Framework, аналогичные фреймворки существуют и в других языках программирования. Например, в PHP вы можете использовать phinx. Устанавливается через composer, прост в настройке и использовании. Новая миграция создаётся при помощи команды php vendor/bin/phinx create MyNewMigration Каждая миграция содержит метод для применения изменений и их отката, например: use Phinx\Migration\AbstractMigration; class ExternalAuthentification extends AbstractMigration { public function up() { $storage = $this->table('ai_storage',array('id' => 'ID')); $storage ->addColumn('CREATED', "timestamp", array("default" => "CURRENT_TIMESTAMP")) ->addColumn('REQUEST_TOKEN', 'string', array('limit' => 256)) ->addColumn('REQUEST_SECRET', 'string', array('limit' => 256)) ->addColumn('REQUEST_VERIFY', 'string', array('limit' => 256)) ->addColumn('SESSION_ID', 'string', array('limit' => 63)) ->save(); } public function down() { $this->dropTable('ai_storage'); } } (Миграции могут быть не только на уровне создания таблиц, но и манипулирования отдельными столбцами) Далее вы либо применяете миграции phinx migrate -e development либо (реже) откатываете) phinx rollback -e development И вот уже эти все миграции хранятся в git-репозитории, наравне с другим кодом проекта.Ответ 2
Как правило, никто не копирует базу данных с одного сервера на другой, в том числе и потому, что в базе данных разработчиков лежат тестовые данные, а в боевой базе данных — настоящие, которые нельзя переписывать. Что в действительности необходимо разработчикам, так это вносить изменения в схему БД и выкладывать справочные данные (список стран, телефонные коды городов и т.д.). Для этого применяется механизм миграций. Под разными платформами это может делаться по разному. Из своего опыта расскажу, как это делается в Entity Framework. Во-первых, чтобы избежать дублирования, структура базы хранится не в виде DDL-скриптов (CREATE TABLE и прочего), а в виде классов .NET. [Table("Users")] public class User { [Key] public Guid Id { get; set; } public string Login { get; set; } [MaxLength(512)] public byte[] PasswordHash { get; set; } } Все таблицы, которые входят в БД, перечислены в выделенном классе, который носит название database context: public class BlogDbContext : DbContext { public DbSetUsers { get; set; } } В начале работы мы должны создать первый слепок БД для работы (первую миграцию). По сути, код Entity Framework исследует BlogDbContext и User и подготовит скрипты для генерации таблицы Users и необходимых индексов. Для создании миграции используется PowerShell-команда Add-Migration. Add-Migration Initial Скрипт будет выглядеть приблизительно так: public partial class Initial : DbMigration { public override void Up() { CreateTable( "dbo.Users", c => new { Id = c.Guid(nullable: false), Login = c.String(nullable: false), PasswordHash = c.ByteArray(maxlength: 512), }) .PrimaryKey(t => t.Id); } public override void Down() { DropTable("dbo.Users"); } } Как видите, скрипт включает две ветки: для продвижения вперёд по списку миграций (метод Up) и для откатывания назад (метод Down). Теперь, обратите внимание, схема БД входит в состав всего остального исходного кода проекта и распространяется вместе с ним. Если нам потребуется внести изменения в схему, мы делаем это, например, добавляем новый класс-таблицу, или новое поле, и снова запускаем Add-Migration. Entity Framework снова генерирует класс, обновляющий схему. В подавляющем большинстве случаев вам не потребуется вручную править код, но вы можете это сделать, например, если вам нужен нестандартный индекс. Что теперь? Вы публикуете ваш код на боевом сервере. При следующем обращении к вашему серверу происходит проверка схемы, и, в случае необходимости, прозрачно накатываются все обновления схемы (вызываются методы Up). В результате обновление базы происходит вместе со всем остальным кодом, и, кстати, не только на боевом сервере, но и между разработчиками.
Комментариев нет:
Отправить комментарий