丢失了我的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:migratebuild议,这是在写这篇文章的时候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