Обычно при внесении изменений в вашей схеме вы» будем использовать 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. При тестировании на вашей промежуточной системе обратите внимание на то, сколько времени потребуется для завершения, поскольку вам, возможно, потребуется предоставить пользователям уведомление о запланированном обслуживании или внести изменения в ваши планы, чтобы быть менее разрушительными с точки зрения миграции.
Первый шаг: не делайте этого, даже если у вас нет постоянной резервной копии и архивации на месте. –