丢失了我的schema.rb! 可以重新生成吗?
由于一些部署问题,我停止在git中跟踪schema.rb。 不知何故,我已经塞满了这个和沿途我的schema.rb文件已经消失的地方。
有没有从数据库或从迁移重新生成schema.rb的方法? 我不想丢失现有的数据。
如果你运行一个rake -T
它会列出你的Rails项目的所有可能的rake任务。 其中之一是db:schema:dump ,它将从数据库中重新创buildRails应用程序的schema.rb。
bundle exec rake db:schema:dump
小心,
rake db:schema:dump
将从数据库转储当前的数据库模式。 这意味着如果您对迁移进行了任何更改,它们将不会反映在schema.rb文件中,而不是您想要的IMO。
如果要从迁移中重新创build模式,请执行以下操作:
rake db:drop # ERASES THE DATABASE !!!! rake db:create rake db:migrate
rake db:schema:dump
我认为这在Rails 3中仍然有效 – 它从数据库重新生成schema.rb。
如果你在本地重新生成schema.rb
,你应该没问题。 它只是保存了数据库表的结构表示。 数据本身不包含在这个文件中。
要重新生成您的schema.rb
文件,请运行:
bundle exec rake db:schema:dump
然后简单地提交新的schema.rb
文件,你应该状态良好!
直接从schema.rb文件本身:
如果您需要在另一个系统上创build应用程序数据库,则应该使用
db:schema:load
,而不是从头开始运行所有的迁移。 后者是一种有缺陷的和不可持续的方法(你将积聚的迁移越多,运行的速度越慢,发生问题的可能性也越大)。
所以不要做rake db:migrate
build议,这是在写这篇文章的时候build议的 – 最低评分的答案。
RAILS 5路:
rails db:schema:dump
或者如果你遇到Gem :: LoadError那么:
bundle exec rails db:schema:dump
注意:
在rails 5中,build议使用rails
而不是rake
生成/执行任务,这只是记住,rails生成的任务是扩展.rake
参见lib/tasks/myTask.rake
。 这意味着这些任务也可以通过预取rake
来执行。
我也有一个类似的问题,即使我删除了迁移,我的旧模式不刷新。
所以,我所做的是删除数据库中的所有现有表,并再次迁移它们。 然后运行“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