2016-12-21 2 views
1

Я использую адрон для Heroku Postgres для моей базы данных (базовая версия). Ruby Sequel - это мой ORM для управления схемой.Миграция Ruby Sequel работает, но не удается добавить столбцы

В последнее время некоторые миграции не обновили схему БД.

Я бегу миграции 19, 019_add_last_unique_story_to_user.rb:

Sequel.migration do 
    up do 
    alter_table(:state_tables) do 
     add_column :last_unique_story, Integer, default: 0 
     add_column :last_unique_story_read?, TrueClass, default: true 
    end 
    end 
    down do 
    alter_table(:state_tables) do 
     drop_column :last_unique_story 
     drop_column :last_unique_story_read? 
    end 
    end 
end 

Это обновляет БД [: schema_info] от версии 18 до 19, но столбцы не будут добавлены в: state_table таблице. Эта проблема существует как для производственных, так и для локальных баз данных. Я попытался выполнить миграцию несколько раз и проверил, что URL-адрес db верен.

Моих быстро исправить: скопировать и вставить код выше в двадцатого миграции, 020_test.rb и пробежал грабли миграции задачи rake db:migrate:up. Это успешно обновило базу данных.

Кто-нибудь знает, что может быть здесь? Почему некоторые миграции выполняются успешно, обновляют версию миграции, но не обновляют столбцы? Может ли это быть проблемой имен, проблемой кеширования или проблемой Heroku? Спасибо за помощь!

ответ

1

Это зависит от того, как написана ваша рейк-задача. Sequel не отправляет рейк-задачи, поэтому вам нужно будет проверить, откуда вы взяли команду рейка.

В общем, единственная причина, по которой миграция не добавляет столбец, заключается в том, что миграция не была выполнена. Например, если версия схемы в базе данных уже была 19, то при миграции вы не выполнили бы миграцию 19. Это объясняет, почему она выполнила миграцию, когда вы скопировали ее на миграцию 20, а затем мигрировали. Если вы запустите мигратор с помощью регистратора базы данных, Sequel будет регистрировать активность миграции (в дополнение к SQL).

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