2016-12-21 33 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 

此更新DB [:SCHEMA_INFO]从版本18到19岁,但没有列被添加到:state_table表。生产数据库和本地数据库都存在此问题。我试过多次迁移并检查数据库网址是否正确。

我速战速决: 我复制并粘贴上面的代码为迁移,020_test.rb,跑到我的耙迁移任务rake db:migrate:up。这成功地更新了数据库。

有人知道这里会发生什么吗?为什么一些迁移成功运行,更新迁移版本,但不更新任何列?这可能是命名问题,缓存问题还是Heroku问题?感谢您的帮助!

回答

1

这取决于你的rake任务如何写入。续集不提供耙子任务,所以你必须检查你从哪里获得耙子任务。

通常,迁移不会添加列的唯一原因是迁移未运行。例如,如果数据库中的模式版本已经是19,那么当您迁移时它不会运行迁移19。这可以解释为什么当您将其复制到迁移20并迁移完成后,它会运行迁移。如果使用数据库记录器运行迁移程序,Sequel将记录迁移活动(除了SQL)。