如何修复具有许多表而不匹配迁移与 Rails 的数据库
How to fix database that has many tables without matching migrations with Rails
我正在帮助朋友的 rails 应用程序。他们有一个包含许多表的数据库,这些表是使用 SQL 而不是 rails 迁移手动添加的。他们已经开始正常添加迁移,但他们需要让两者恢复同步。
如果我们现在添加迁移,它们会出错,因为那些 tables/columns 已经存在。如果我们将它们排除在外,人们必须使用 db:schema:load 起床和 运行ning,然后 运行 按名称一次一个迁移以避免错误。我们想避免这种情况并恢复到健康状态。
有谁知道让迁移恢复与数据库同步的更好方法吗?我们必须在不丢失任何数据的情况下执行此操作。
备份表中不存在的内容后
迁移,您可以:
DROP
那些表;
- 为每个删除的表创建迁移;
- 运行 每个创建的迁移;
- 手动重新填充使用迁移创建的表。
这样您就不会遇到迁移问题。
如果您没有关于它们的相关数据,请立即 DROP
。
这是 question with the same problem(因为旧的没有被接受的答案,所以没有投票赞成关闭你的重复):
解决方法是:
- Start by referencing your existing MySQL database in
database.yml
.
- run
rake db:schema:dump
to generate the schema.rb
file
- Paste the
create_table
methods from your schema.rb
into a new migration, and Voila!
为避免任何不一致,您可以随时检查 table 是否已经存在,如果是,则完全跳过迁移:
class CreateTable < ActiveRecord::Migration
def change
unless ActiveRecord::Base.connection.table_exists?('table_name')
create_table :table_names do |t|
# some columns
end
end
end
end
我正在帮助朋友的 rails 应用程序。他们有一个包含许多表的数据库,这些表是使用 SQL 而不是 rails 迁移手动添加的。他们已经开始正常添加迁移,但他们需要让两者恢复同步。
如果我们现在添加迁移,它们会出错,因为那些 tables/columns 已经存在。如果我们将它们排除在外,人们必须使用 db:schema:load 起床和 运行ning,然后 运行 按名称一次一个迁移以避免错误。我们想避免这种情况并恢复到健康状态。
有谁知道让迁移恢复与数据库同步的更好方法吗?我们必须在不丢失任何数据的情况下执行此操作。
备份表中不存在的内容后 迁移,您可以:
DROP
那些表;- 为每个删除的表创建迁移;
- 运行 每个创建的迁移;
- 手动重新填充使用迁移创建的表。
这样您就不会遇到迁移问题。
如果您没有关于它们的相关数据,请立即 DROP
。
这是 question with the same problem(因为旧的没有被接受的答案,所以没有投票赞成关闭你的重复):
解决方法是:
- Start by referencing your existing MySQL database in
database.yml
.- run
rake db:schema:dump
to generate theschema.rb
file- Paste the
create_table
methods from yourschema.rb
into a new migration, and Voila!
为避免任何不一致,您可以随时检查 table 是否已经存在,如果是,则完全跳过迁移:
class CreateTable < ActiveRecord::Migration
def change
unless ActiveRecord::Base.connection.table_exists?('table_name')
create_table :table_names do |t|
# some columns
end
end
end
end