Вот пара диких догадок, которые могут помочь.Похоже, у вас транзакция прерывается, где-то перехватывается и игнорируется;это может испортить всю транзакцию, в которой выполняется self.up
, и объяснить ваше сообщение об ошибке и поведение, которое вы видите.
Вызов reset_column_information
обычно идет после изменение базы данных и только в том случае, если схема изменилась, и вам нужно использовать новую схему для остальной части миграции;ни один из них не применим к вам, поэтому вы можете полностью отказаться от Closet.reset_column_information
.
У вас также должен быть метод execute
, доступный в ваших миграциях, так что вам вообще не нужно разговаривать с Closet.Кроме того, вам не нужны точки с запятой в конце ваших операторов SQL;они, вероятно, не причинят вреда, но если мы разберемся с этим до самого необходимого, мы могли бы устранить проблему.
Попробуйте и посмотрите, что произойдет:
def self.up
say_with_time "Unifying gender column to h/f" do
execute %q{UPDATE closets SET gender = 'h' WHERE gender IN ('homme', 'Homme', 'men', 'Men')}
execute %q{UPDATE closets SET gender = 'f' WHERE gender IN ('femme', 'Femme', 'women', 'Women')}
end
end
Это дает намнеобходимый минимум для обновления вашей базы данных.Надеюсь, что проблема со случайными транзакциями ушла со всеми остальными вещами, которые вам не нужны.