【发布时间】:2012-03-16 03:48:59
【问题描述】:
由于一些部署问题,我停止在 git 中跟踪 schema.rb。不知何故,我把它塞进去了,而且我的 schema.rb 文件消失了。
有没有办法从数据库或迁移中重新生成 schema.rb?我不希望丢失现有数据。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 git
由于一些部署问题,我停止在 git 中跟踪 schema.rb。不知何故,我把它塞进去了,而且我的 schema.rb 文件消失了。
有没有办法从数据库或迁移中重新生成 schema.rb?我不希望丢失现有数据。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 git
如果您运行rake -T,它将列出您的 Rails 项目的所有可能的 rake 任务。其中之一是 db:schema:dump,它将从数据库中为 Rails 应用程序重新创建 schema.rb。
bundle exec rake db:schema:dump
【讨论】:
rake db:schema:dump 之后仍然包含空模式
小心,
rake db:schema:dump
将转储当前的数据库架构从数据库。这意味着,如果您对迁移进行了任何更改,它们将不会反映在 schema.rb 文件中,这不是您想要的 IMO。
如果您想从迁移中重新创建架构,请执行以下操作:
rake db:drop # ERASES THE DATABASE !!!!
rake db:create
rake db:migrate
【讨论】:
rake db:schema:dump 命令。
rake db:schema:dump
我认为这在 Rails 3 中仍然有效 - 它从数据库中重新生成 schema.rb。
【讨论】:
RAILS 5 路:
rails db:schema:dump
或者如果你遇到 Gem::LoadError 那么:
bundle exec rails db:schema:dump
注意:
在 Rails 5 中,建议使用rails 而不是rake 生成/执行任务,这只是为了记住,rails 生成的任务扩展名为.rake,参见lib/tasks/myTask.rake。这意味着这些任务也可以通过添加rake来执行。
【讨论】:
如果你在本地重新生成schema.rb,你应该没问题。它只是保存数据库表结构的表示。数据本身不包含在此文件中。
要重新生成您的 schema.rb 文件,请运行:
bundle exec rake db:schema:dump
然后只需提交新的schema.rb 文件,您应该状态良好!
【讨论】:
直接来自 schema.rb 文件本身:
如果您需要在另一个上创建应用程序数据库 系统,您应该使用
db:schema:load,而不是运行所有迁移 从头开始。后者是一种有缺陷且不可持续的方法(迁移越多 你会积累,它运行得越慢,出现问题的可能性就越大)。
因此,请勿执行 rake db:migrate 的建议,这是在撰写本文时 - 评分最低的答案中建议的。
【讨论】:
我也有类似的问题,即使我删除了迁移,我的旧架构也没有刷新。
所以,我所做的是删除数据库中所有现有的表并再次迁移它们。然后运行“db:schema:load”命令给了我一个新的 schema.rb。
drop table my_table_name // deleted them individually
rake db:migrate
rake db:schema:dump // re-created a new schema
【讨论】: