我正在使用Heroku Postgres插件作为我的数据库(基本版)。 Ruby Sequel是我的架构管理ORM。
最近,一些迁移尚未更新数据库架构。
我运行迁移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表中。生产和本地数据库都存在此问题。我尝试过多次迁移并检查数据库网址是否正确。
我的快速修复:
我将上述代码复制并粘贴到 20th 迁移,020_test.rb中,然后运行我的rake迁移任务rake db:migrate:up
。这成功更新了数据库。
有谁知道这里会发生什么?为什么某些迁移成功运行,更新迁移版本,但不更新任何列?这可能是命名问题,缓存问题还是Heroku问题?谢谢你的帮助!
答案 0 :(得分:1)
这取决于您的rake任务的编写方式。续集不提供rake任务,因此你必须检查你从哪里获得rake任务。
通常,迁移不添加列的唯一原因是迁移未运行。例如,如果数据库中的架构版本已经是19,那么当您向上迁移时它将不会运行迁移19。这可以解释为什么在将其复制到迁移20然后迁移时它确实运行了迁移。如果使用数据库记录器运行迁移器,Sequel将记录迁移活动(除SQL之外)。