Ruby on rails Rake数据库:针对现有数据库的迁移

Ruby on rails Rake数据库:针对现有数据库的迁移,ruby-on-rails,rake,Ruby On Rails,Rake,我有一个新的rails应用程序,它将使用现有的数据库(由另一个ruby应用程序创建)。 为此,我为一个已经存在的数据库表创建了一个模型,但现在rails向我提供了必须运行的错误消息 rake db:migration 但是如果我尝试这样做,我会得到一个错误,因为表已经存在 是否有任何方法可以执行迁移并忽略现有表?该表是正确的,应该存在,并且填充了其他应用程序的数据。我希望使用此应用程序来使用这些信息 谢谢 编辑: DB设置很好,因为我以前能够执行DB:迁移。我使用 rails g model

我有一个新的rails应用程序,它将使用现有的数据库(由另一个ruby应用程序创建)。 为此,我为一个已经存在的数据库表创建了一个模型,但现在rails向我提供了必须运行的错误消息

rake db:migration
但是如果我尝试这样做,我会得到一个错误,因为表已经存在

是否有任何方法可以执行迁移并忽略现有表?该表是正确的,应该存在,并且填充了其他应用程序的数据。我希望使用此应用程序来使用这些信息

谢谢

编辑: DB设置很好,因为我以前能够执行DB:迁移。我使用

rails g model fundo
(fundo是模型的名称,fundoS是表的名称) 模型还没有属性,但表有列

编辑2: 这些是使用--trace运行时的输出

$rake db:schema:dump--trace

**调用db:schema:dump(第一次)

**调用环境(第一次)

**执行环境

**调用数据库:加载配置(第一次)

**执行db:load\u config **执行db:schema:dump

$rake db:migrate--trace

**调用数据库:迁移(第一次)

**调用环境(第一次)

**执行环境

**调用数据库:加载配置(第一次)

**执行db:load\u config

**执行数据库:迁移 ==CreateFundos:正在迁移===================================================

--创建表格(:fundos)rake中止!发生错误,此迁移和所有后续迁移已取消:PG::DuplicateTable:错误:关系 “fundos”已存在创建表“fundos”(“id”序列主 键,“在时间戳处创建”,在“时间戳”处更新)


rails似乎正在尝试重新创建表。但是我只是想让它们同步,因为表已经在那里了

如果使用
rails g model
为现有表创建模型,只需删除创建的迁移文件即可

表模式将正确转储到schema.rb中,因此,即使没有迁移文件,也可以使用
rake db:setup
在其他机器上从头开始创建


您可以使用
rake db:schema:dump
手动更新schema.rb。

如果您使用
rails g model
为已经存在的表创建模型,只需删除创建的迁移文件即可

表模式将正确转储到schema.rb中,因此,即使没有迁移文件,也可以使用
rake db:setup
在其他机器上从头开始创建


您可以使用
rake db:schema:dump
手动更新schema.rb。

是否有大量要执行的迁移文件?如果不是太多,您可以通过执行特定版本的迁移

rake db:migrate:redo VERSION=version
如果要创建的迁移文件表不太多,您可以通过添加以下内容来编辑迁移文件:

 if ActiveRecord::Base.connection.table_exists?(table_name)
在创建表之前


在您的本地环境中,也许您可以删除不必要的文件。

是否有很多要执行的迁移文件?如果不是太多,您可以通过执行特定版本的迁移

rake db:migrate:redo VERSION=version
如果要创建的迁移文件表不太多,您可以通过添加以下内容来编辑迁移文件:

 if ActiveRecord::Base.connection.table_exists?(table_name)
在创建表之前

在本地环境中,也许您可以删除不必要的文件。

cd db/migrate/

ls | cut-d'| f1 |同时读取行;do bundle exec rake db:migrate:up VERSION=$line;完成

运行文件

cd db/migrate中的所有迁移/

ls | cut-d'| f1 |同时读取行;do bundle exec rake db:migrate:up VERSION=$line;完成

运行文件中的所有迁移

--创建表格(:fundos)rake中止!发生错误,此迁移和所有后续的>迁移已取消:PG::DuplicateTable:错误:关系“fundos”已存在>创建表“fundos”(“id”串行主键,“在“时间戳”创建,>在“时间戳”更新)

我要做的是转到db/migrate,然后转到发生create_table(:fundos)的迁移文件。把那一行注释掉。再试一次,如果它再次抛出错误,请检查错误并找到有问题的代码。然后评论出来,继续这样做,直到它通过。一旦它通过,联合国评论一切

--创建表格(:fundos)rake中止!发生错误,此迁移和所有后续的>迁移已取消:PG::DuplicateTable:错误:关系“fundos”已存在>创建表“fundos”(“id”串行主键,“在“时间戳”创建,>在“时间戳”更新)


我要做的是转到db/migrate,然后转到发生create_table(:fundos)的迁移文件。把那一行注释掉。再试一次,如果它再次抛出错误,请检查错误并找到有问题的代码。然后评论出来,继续这样做,直到它通过。一旦它通过,联合国评论一切

您能否确认您的数据库配置正确,并且您现有的表命名符合新创建模型的Rails标准?@vee更新了问题;)您能否确认您的数据库配置正确,并且您现有的表命名符合新创建模型的Rails标准?@vee更新了问题;)这在Rails 6中仍然有效。这在Rails 6中仍然有效。