Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.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 rake db:migrate是否使用正确的命令将schema.rb与数据库架构重新同步?_Ruby On Rails_Schema_Migration_Rake - Fatal编程技术网

Ruby on rails rake db:migrate是否使用正确的命令将schema.rb与数据库架构重新同步?

Ruby on rails rake db:migrate是否使用正确的命令将schema.rb与数据库架构重新同步?,ruby-on-rails,schema,migration,rake,Ruby On Rails,Schema,Migration,Rake,我运行“rake db:migrate”将schema.db与我的数据库模式重新同步。但它失败了,说我的一个表已经存在。我想它是在试图重新创建表格。如果您只想更新schema.rb以反映您在数据库中独立于Rails所做的任何更改,那么如果不是“rake db:migrate”,您应该使用什么命令?关于这种类型的文档的最佳来源是什么?尝试rake db:schema:dump或rake db:migrate:redo“rake db:migrate”将尝试为您的项目运行所有未完成的迁移。如果您只想

我运行“rake db:migrate”将schema.db与我的数据库模式重新同步。但它失败了,说我的一个表已经存在。我想它是在试图重新创建表格。如果您只想更新schema.rb以反映您在数据库中独立于Rails所做的任何更改,那么如果不是“rake db:migrate”,您应该使用什么命令?关于这种类型的文档的最佳来源是什么?

尝试
rake db:schema:dump
rake db:migrate:redo
“rake db:migrate”将尝试为您的项目运行所有未完成的迁移。如果您只想转储模式,请执行“rake db:schema:dump”。
但我认为你有一个问题,它说,表已经存在。您的一次迁移失败,因为它尝试添加的表已存在于您的数据库中。你是手工制作的吗?您是否记录了迁移,但没有记录下来?在编写将来的迁移之前,您需要解决此问题。如果这只是一个错误,而表格就在那里并且是正确的,那么您希望忽略这一点。我的建议是通过在失败的迁移中注释掉create表来解决这个问题。然后运行“rakedb:migrate”。然后,创建表返回。这将更新您的架构版本。

确保在所有迁移中都写下正确的记录。

回答关于文档的最后一个问题:

  • rails 2.1+的rails rake任务指南:
  • 关于迁移的精彩视频:

我发现,有时候,当事情变得有点奇怪时,您会发现Rails希望运行一个迁移,它应该考虑已经完成了(表已经存在,等等)。通过查找迁移的编号(文件名开头的编号部分),进入mysql并发出如下查询,可以将迁移标记为完成:

insert into schema_migrations values('20090521153438');
(或无论您的迁移数量是多少)

或者如果是使用Desert的migrate_插件运行的插件迁移:

insert into plugin_schema_migrations values('my_plugin', '005');
试一试

以前

RAILS_ENV=development rake db:migrate
祝你快乐


确保在测试或开发环境中运行它,因为这将删除数据库/表

rake db:migrate:reset
将删除所有表,运行所有迁移并创建新的
schema.rb
文件。

使用
rake db:schema:dump

$ rake -T | grep schema
rake db:schema:dump # Create a db/schema.rb file that is portable
                    #  against any database supported by ActiveRecord

rake db:schema:dump
重新创建
db/schema.rb
文件,无需再次运行任何迁移,也无需删除任何表(这意味着丢失这些表中的数据),因此这是您可以先尝试的侵入性最小的方法。

rake db:drop删除所有表,因此,下一个rake db:migrate将从头开始并应用所有迁移可能这与
rake db:migrate:reset
相同?这可能很危险,因为它将从数据库中删除现有数据。很好,谢谢!这是我见过的唯一不会删除所有数据的解决方案。如果表中有不想删除的数据,请使用此选项:)另一种策略(如果有黑客行为),是注释掉有问题的迁移主体,然后进行迁移。请尝试
rake db:schema:dump
,然后给编辑器一些时间来获取文件更改。
$ rake -T | grep schema
rake db:schema:dump # Create a db/schema.rb file that is portable
                    #  against any database supported by ActiveRecord