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