丢失了我的schema.rb!可以再生吗?

时间:2012-03-16 03:49:00

标签: ruby-on-rails ruby-on-rails-3 git

由于一些部署问题,我停止在git中跟踪schema.rb。不知怎的,我已经填满了这个,并且我的schema.rb文件已经消失了。

有没有办法从数据库或迁移中重新生成schema.rb?我宁愿不丢失现有数据。

7 个答案:

答案 0 :(得分:206)

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

bundle exec rake db:schema:dump

答案 1 :(得分:51)

小心,

rake db:schema:dump

将转储当前数据库架构从数据库。这意味着如果您对迁移进行了任何更改,那么 NOT 将反映在schema.rb文件中,而这不是您想要的IMO。

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

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

答案 2 :(得分:11)

rake db:schema:dump

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

答案 3 :(得分:6)

RAILS 5 Way:

rails db:schema:dump

或者如果你遇到 Gem :: LoadError ,那么:

bundle exec rails db:schema:dump

注意:

在rails 5中,建议使用rails而不是rake生成/执行任务,这只是要记住,rails生成的任务是扩展名.rake,请参阅{ {1}}。这意味着这些任务也可以通过预先lib/tasks/myTask.rake来执行。

答案 4 :(得分:4)

如果您在本地重新生成schema.rb,那么您应该没问题。它只是表示数据库表的结构。数据本身不包含在此文件中。

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

bundle exec rake db:schema:dump

然后只需提交新的schema.rb文件,你应该保持良好状态!

答案 5 :(得分:4)

直接来自schema.rb文件本身:

  

如果需要在另一个上创建应用程序数据库   系统,您应该使用db:schema:load,而不是运行所有迁移   从头开始。后者是一种有缺陷且不可持续的方法(迁移越多   你会积累,它会越慢,发生问题的可能性越大。

所以不要做rake db:migrate的建议,这是在撰写本文时提出的 - 评分最低的答案。

答案 6 :(得分:0)

我也有类似的问题,即使我删除了迁移,我的旧架构也不会刷新。

所以,我所做的是删除数据库中的所有现有表并再次迁移它们。然后运行" db:schema:load"命令给了我一个新的schema.rb。

drop table my_table_name // deleted them indivisully
rake db:migrate
rake db:schema:dump // re-created a new schema