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

bra*_*rad 130 git ruby-on-rails ruby-on-rails-3

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

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

mgu*_*mon 217

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

bundle exec rake db:schema:dump
Run Code Online (Sandbox Code Playgroud)

  • 从数据库本身来看,如果在迁移之外发生了更改,请务必小心. (7认同)

gam*_*mov 55

小心,

rake db:schema:dump
Run Code Online (Sandbox Code Playgroud)

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

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

rake db:drop  # ERASES THE DATABASE !!!! 
rake db:create
rake db:migrate
Run Code Online (Sandbox Code Playgroud)

  • 在我的回答中清楚地解释了每个画布.我只是通过运行schema:dump并没有得到一个干净的架构而被完全咬了.OP正在谈论跟踪CVS中的模式.我希望我的模式与我的迁移中的定义一致,而不是生产数据库或旧开发数据库中的过时版本 (4认同)
  • 这将导致数据丢失,OP 表示他们希望避免这种情况。此外,正如 Colin 指出的那样,纯粹从迁移中重新生成数据库可能是一个非常糟糕的主意,因为遇到奇怪的依赖问题(一般来说)的可能性增加。如果有待处理的迁移,最好在开发计算机上运行最后的迁移,然后运行“rake db:schema:dump”命令。 (2认同)

psc*_*egr 11

rake db:schema:dump
Run Code Online (Sandbox Code Playgroud)

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


Kal*_*lah 6

RAILS 5路:

rails db:schema:dump
Run Code Online (Sandbox Code Playgroud)

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

bundle exec rails db:schema:dump
Run Code Online (Sandbox Code Playgroud)

注意:

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


Gra*_*wan 5

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

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

bundle exec rake db:schema:dump
Run Code Online (Sandbox Code Playgroud)

然后只需提交新schema.rb文件,您就可以保持良好状态!


Col*_*ers 5

直接从 schema.rb 文件本身:

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

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