我的模式丢了,能重建吗?

由于一些部署问题,我停止了在 git 中跟踪 schema.rb。不知怎么搞的,我把这个搞砸了然后我的 schema.rb 文件就不见了。

有没有从数据库或迁移中重新生成 schema.rb 的方法?我不希望丢失现有的数据。

63123 次浏览
rake db:schema:dump

我认为这在 Rails 3中仍然有效-它从数据库中重新生成 schema.rb。

如果您运行 rake -T,它将列出您的 Rails 项目的所有可能的 rake 任务。其中之一是 Schema: dump,它将从数据库中为 Rails 应用程序重新创建 schema.rb。

bundle exec rake db:schema:dump

如果在本地再生 schema.rb,应该没问题。它只是保存了数据库表结构的表示形式。数据本身不包含在此文件中。

若要重新生成 schema.rb文件,请运行:

bundle exec rake db:schema:dump

然后简单地提交新的 schema.rb文件,你应该在良好的形状!

小心点,

rake db:schema:dump

将转储当前的 DB 模式 尸体上的。这意味着,如果您对迁移做了任何更改,它们将在 schema.rb 文件中反映 没有,而这不是您想要的 IMO。

如果要从迁移中重新创建模式,请执行以下操作:

rake db:drop  # ERASES THE DATABASE !!!!
rake db:create
rake db:migrate

直接从 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

5种方式:

rails db:schema:dump

或遇到 Gem: : LoadError时:

bundle exec rails db:schema:dump

注:

在 Rails 5中,建议使用 rails而不是 rake来生成/执行任务,这只是为了记住,Rails 生成的任务是 .rake的扩展,见 lib/tasks/myTask.rake。这意味着这些任务也可以通过前置 rake来执行。