【问题标题】:Ruby Sequel migrations running, but fail to add columnsRuby Sequel 迁移正在运行,但无法添加列
【发布时间】:2017-05-07 07:12:33
【问题描述】:

我正在为我的数据库(基本版)使用 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 是否正确。

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

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

【问题讨论】:

    标签: ruby heroku sequel heroku-postgres sequel-gem


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-26
      • 1970-01-01
      • 2017-10-02
      • 2020-07-27
      • 1970-01-01
      • 1970-01-01
      • 2011-09-16
      • 1970-01-01
      相关资源
      最近更新 更多