Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 丢失了我的schema.rb!它能再生吗?_Ruby On Rails_Ruby On Rails 3_Git - Fatal编程技术网

Ruby on rails 丢失了我的schema.rb!它能再生吗?

Ruby on rails 丢失了我的schema.rb!它能再生吗?,ruby-on-rails,ruby-on-rails-3,git,Ruby On Rails,Ruby On Rails 3,Git,由于一些部署问题,我停止跟踪git中的schema.rb。不知怎的,我把它塞满了,我的schema.rb文件在某个地方消失了 有没有办法从数据库或迁移中重新生成schema.rb?我宁愿不丢失现有的数据 rake db:schema:dump 我认为这在Rails 3中仍然有效-它从数据库中重新生成schema.rb。如果运行rake-T,它将列出Rails项目中所有可能的rake任务。其中之一是db:schema:dump,它将从数据库中为Rails应用程序重新创建schema.rb bun

由于一些部署问题,我停止跟踪git中的schema.rb。不知怎的,我把它塞满了,我的schema.rb文件在某个地方消失了

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

rake db:schema:dump

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

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

bundle exec rake db:schema:dump

如果您在本地重新生成
schema.rb
,您应该没事了。它只是保存数据库表结构的表示形式。数据本身不包含在此文件中

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

bundle exec rake db:schema:dump
然后只需提交新的
schema.rb
文件,您就应该状态良好了

小心

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

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

rake db:drop  # ERASES THE DATABASE !!!! 
rake db:create
rake db:migrate

直接从schema.rb文件本身:

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


因此,不要使用
rake db:migrate
,这是在撰写本文时最低评级答案中提出的建议。

我也遇到了类似的问题,即即使删除了迁移,我的旧模式也不会刷新

所以,我所做的是删除数据库中所有现有的表并再次迁移它们。然后运行“db:schema:load”命令给了我一个新的schema.rb

drop table my_table_name // deleted them individually
rake db:migrate
rake db:schema:dump // re-created a new schema

轨道5路:

rails db:schema:dump
或者,如果遇到Gem::LoadError,则:

bundle exec rails db:schema:dump
注意:


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

来执行。非常感谢,有很多答案,但看起来你是第一个(刚刚)所以为你打勾。只是好奇,这是从数据库本身还是从迁移中生成模式?从数据库本身,因此,如果在迁移之外发生了更改,请小心。schema.rb在rails 2.0上的rake db:schema:dump之后仍然包含空的schema。在运行上述命令之后,my schema.rb文件保持完全相同。如果您的开发机器上有任何挂起的迁移,您可能希望运行最后几个挂起的迁移在重新生成模式之前,是的,完全从迁移中重新生成数据库是一个非常糟糕的主意,特别是因为这样会导致数据丢失。这会导致数据丢失,OP表示他们希望避免这种情况。此外,正如Colin指出的,纯粹从迁移中重新生成数据库可能是一个非常糟糕的主意,因为运行到奇怪的依赖性问题(一般来说)的可能性增加了。如果有挂起的迁移,最好在开发机器上运行最后的迁移,然后运行
rake db:schema:dump
命令。我的回答中清楚地解释了每个画布。我只运行schema:dump,而没有得到一个干净的schema。OP讨论的是在CVS中跟踪模式。我希望我的模式与迁移中的定义保持一致,而不是生产数据库或旧开发数据库中的过时版本