что может привести к тому, что миграция ничего не сделает, кроме как сохранить правильную версию? - PullRequest
3 голосов
/ 08 декабря 2011

У меня есть приложение, которое я впервые писал в rails 3.1, но, пытаясь уменьшить размер слагов на heroku, я создал новое приложение rails 3.0.9 и вручную переместил необходимый код (или я так думал).Более месяца все работало как положено, но я использовал rake db: schema: load, потому что я не изменил схему db.Сегодня я попытался изменить свою схему, и миграции ничего не делают.Похоже, они думают, что работают, и отслеживают версии, но я не получаю вывод на консоль и не изменяю db, также файл schema.rb не изменяется.

rake db:migrate --trace фактически говорит ** Execute db:schema:dump как последний шаг, но в файле schema.rb все еще нет столбца, который я пытался добавить.Кто-нибудь знает, что происходит?Приложение подключено к базе данных, и все работает нормально. Я просто не могу выполнить какие-либо миграции.Я мог бы изменить файл schema.rb и снова запустить rake: db: load, но я бы хотел избежать потери данных при производственном развертывании.

1 Ответ

3 голосов
/ 08 декабря 2011

Миграции для Rails 3.1 могут использовать метод Migration#change, который знает, как выполнять миграцию как вверх, так и вниз. В версии 3.0 вам понадобятся отдельные методы Migration.up и Migration.down. Вы должны иметь возможность изменить change на up и затем написать раздел down.

Как указывалось, вам нужно обязательно изменить def change на def self.up и def self.down, поскольку более старые методы миграции являются классами, а не методами экземпляров.

...