2016-12-06 2 views
1

Я новичок в программировании. Я использую Rails 4 и Postgres как базу данных на производстве. Когда я меняю свою структуру базы данных, какова наилучшая практика обновления производственной базы данных при развертывании с использованием Capistrano? Я хочу сохранить все данные в производстве целыми.Лучшая практика обновления производственной базы данных?

Я заметил, что иногда, когда я менял схему и развертывал ее на производство, некоторые из существующих записей данных теряются.

+2

Первый шаг: не делайте этого, даже если у вас нет постоянной резервной копии и архивации на месте. –

ответ

1

Обычно при внесении изменений в вашей схеме вы» будем использовать rails g migration для создания новых миграций, а затем сделать что-то вроде этого:

class AddUsersDiscountToken < ActiveRecord::Migration 
    def change 
    add_column :users, :discount_token, :string 
    end 
end 

Эта миграция добавит discount_token столбец в таблице и users может применяться с:

rake db:migrate 

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

Помните, несколько правил:

  • Всегда резервные копии данных перед применением каких-либо миграции с помощью соответствующего инструмента. mysqldump - хорошее место для начала. Копирование двоичных файлов данных MySQL не является адекватным и не будет работать надежно, если вообще.
  • Всегда проверьте свои резервные копии и убедитесь, что все есть. По какой-то причине процесс резервного копирования может закончиться рано и не удалось должным образом создать резервную копию всех таблиц и данных.
  • Никогда Разверните миграцию в своей рабочей базе данных без предварительного тестирования на копии. Именно здесь вам пригодится резервная копия, вы получаете возможность ее восстановить, запустить миграцию и протестировать результаты.

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

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

0

Если вы не удаляете таблицу или не удаляете столбец migrations, это не вызовет никаких проблем.

Чтобы избежать некоторых проблем, связанных с миграцией убедитесь, что вы после этого:

  1. Если можно попробовать переименовать table или column, чем удаление и создание таблицы с одинаковой структурой.
  2. Проверьте перенастройки в случае reversible вам нужно откатить
  3. Если вы пишете сценарий для обновления базы данных убедитесь, что у вас есть counter-script готовы.
  4. Самое главное понять, что миграция именно делает крест проверить его на промежуточной среде, чтобы убедиться, что вы не потерять свои данные - По @CraigRinger
+2

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

+0

@CraigRinger Это хорошая точка –

Смежные вопросы