Ruby Sequel 迁移 运行,但无法添加列

Ruby Sequel migrations running, but fail to add columns

我正在为我的数据库(基本版本)使用 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 table 添加任何列。生产数据库和本地数据库都存在此问题。我试过多次迁移并检查了 db url 是否正确。

我的快速修复: 我将上面的代码复制并粘贴到 20th 迁移、020_test.rb 和 运行 我的 rake 迁移任务 rake db:migrate:up 中。这已成功更新数据库。

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

这取决于你的 rake 任务是如何编写的。 Sequel 不提供佣金任务,因此您必须检查从哪里获得佣金任务。

一般来说,迁移不会添加该列的唯一原因是迁移不是 运行。比如数据库中的schema版本已经是19了,那么你往上迁移的时候就不会运行迁移19了。这将解释为什么当您将其复制到迁移 20 然后向上迁移时它会执行 运行 迁移。如果您 运行 带有数据库记录器的迁移器,Sequel 将记录迁移 activity(除了 SQL)。