1

我正在为我的数据库(基本版)使用 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 表中。生产数据库和本地数据库都存在此问题。我已尝试多次迁移并检查数据库 url 是否正确。

我的快速修复:我将上述代码复制并粘贴到第 20次迁移 020_test.rb 中,然后运行我的 rake 迁移任务rake db:migrate:up。这成功地更新了数据库。

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

4

1 回答 1

1

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

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

于 2016-12-22T17:39:50.327 回答