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)
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)
psc*_*egr 11
rake db:schema:dump
Run Code Online (Sandbox Code Playgroud)
我认为这在Rails 3中仍然有效 - 它从数据库中重新生成schema.rb.
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
.
如果您schema.rb
在本地重新生成,则应该没问题。它仅表示数据库表的结构。数据本身不包含在此文件中。
要重新生成schema.rb
文件,请运行:
bundle exec rake db:schema:dump
Run Code Online (Sandbox Code Playgroud)
然后只需提交新schema.rb
文件,您就可以保持良好状态!
直接从 schema.rb 文件本身:
如果您需要在另一个系统上创建应用程序数据库,您应该使用
db:schema:load
,而不是从头开始运行所有迁移。后者是一种有缺陷且不可持续的方法(您积累的迁移越多,运行速度就越慢,出现问题的可能性就越大)。
所以不要做 的建议rake db:migrate
,这是在撰写本文时 - 评分最低的答案中提出的。
归档时间: |
|
查看次数: |
47103 次 |
最近记录: |