2016-04-27 5 views
0

Итак, приложение работает как можно точнее при производстве и локальном. Затем, локально, я сделал пару изменений в БД, таких как добавление столбца и изменение атрибутов столбца. Когда я перешел на локальную миграцию, у меня появилась ошибка, поэтому я удалил этот файл миграции, откинув всю таблицу и создав новую миграцию со всем, настроенным так, как я этого хочу. Миграция на местном уровне и работа.Laravel Migration Local vs Production

Теперь я переместил эти изменения в github, и они автоматически потянулись к Laravel Forge и вышли на производственный сервер. Я получаю сообщение об ошибке «таблица уже существует». Таким образом, в репозитории github есть новая миграция для той таблицы, которая уже запущена на моем рабочем сервере.

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

Спасибо!

+0

Это один из тех случаев, когда вы действительно осознаете важность сервера постановки/производства-тени :) – blackpla9ue

+0

Что такое «тень производства»? –

+0

Это место, где вы «ставите» развертывание сначала, прежде чем развертывать сервер, чтобы смягчить некоторые проблемы прямого развертывания изменений на реальном сервере. Вот так. Специально там, где несколько разработчиков работают над одним проектом, и есть сценарии миграции, это действительно пригодится. – blackpla9ue

ответ

3

Если вы хотите добавить новые столбцы или изменить что-либо в базе данных, которая является производством.

Вам нужно будет создать новую миграцию, добавив эти строки в базу данных. Это не так просто, как просто изменить существующую миграцию.

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

Если, например, у вас уже перенесена таблица пользователя, и вы решили добавить псевдоним в существующую таблицу.

Вы бы создать новую миграцию php artisan make:migration alter_users_table_add_nickname

, а затем внутри этой миграции InstEd использования Schema::create было бы использовать Schema::table

public function up() 
{ 
    Schema::table('users', function(Blueprint $table) 
    { 
     $table->string('nickname'); 
    }); 
} 

public function down() 
{ 
    Schema::table('users', function(Blueprint $table){ 
     $table->dropColumn('nickname'); 

    }); 
} 

Вы можете прочитать больше здесь на Creating Columns

+0

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

+0

Ну, быстрое решение было бы экспортировать содержимое вашей производственной БД, а не структуру. Удалите таблицы и запустите развертывание в forge, чтобы перезапустить миграцию с помощью отредактированной миграции, а затем импортировать данные обратно. Однако я бы рекомендовал проверить завершение фиксации, когда у вас была первоначальная миграция, и выполнить описанные выше шаги. – Anderscc

+1

Хорошо, за ваше последнее предложение, мне нужно синхронизировать производство с локальным, чтобы эти миграции были одинаковыми. Я сделаю это и последую за тем, чтобы отметить ваш ответ. Благодаря! –