由于一些部署问题,我停止在git中跟踪schema.rb。不知怎的,我已经填满了这个,并且我的schema.rb文件已经消失了。
有没有办法从数据库或迁移中重新生成schema.rb?我宁愿不丢失现有数据。
答案 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