Похоже, что вы находитесь в состоянии, когда схема производственной базы данных не совсем соответствует используемой в dev (хотя она не совсем понятна). Я бы нарисовал линию на песке, и получил бы этот продукт в лучшем состоянии. По сути, вам нужно убедиться, что в базе данных prod db есть таблица «schema_info», в которой перечислены все миграции, которые вы никогда не хотите запускать в рабочей среде. Затем вы можете добавить миграции к своему сердечному контенту, и они будут работать против производственной базы данных.
После того, как вы сделали это, вы можете написать миграции, которые добавляют изменения схемы или добавляют данные, но одна вещь, с которой вы должны быть очень осторожны, это то, что если вы добавляете данные с помощью миграции, вы должны определить модель в самой миграции , вот так:
class AddSomeColumnsToUserTable < ActiveRecord::Migration
class User < ActiveRecord::Base; end
def self.up
add_column :users, :super_cool, :boolean, :default => :false
u = User.find_by_login('cameron')
u.super_cool = true
u.save
end
def self.down
remove_column :users, :super_cool
end
end
Причина этого в том, что в будущем вы можете удалить модель полностью, во время какого-либо рефакторинга или другого. Если вы не определили класс пользователя в строке «User.find_by_login ...», миграция вызовет исключение, которое является большой болью.