繁体   English   中英

Rake db:向现有数据库迁移

[英]Rake db:migration against an existing DB

我有一个新的Rails应用程序,该应用程序将从现有的数据库(由另一个ruby应用程序创建)中消耗。 为此,我为一个已经存在的数据库表创建了一个模型,但是现在rails给了我必须运行的错误消息

rake db:migration

但是,如果我尝试这样做,则会出现错误,因为该表已经存在。

有什么方法可以执行迁移并忽略现有表吗? 该表是正确的,应该在该表中,并填充有来自另一个应用程序的数据。 我想要这个应用程序来使用信息。

谢谢

编辑:数据库设置很好,因为我以前能够执行db:migrations。 我使用创建了模型

rails g model fundo

(fundo是模型的名称,fundoS是表的名称)模型尚无属性,但是表中有列

编辑2:如果我使用--trace运行,这些是输出

$ rake db:schema:dump --trace

**调用db:schema:dump(first_time)

**调用环境(首次)

**执行环境

**调用db:load_config(first_time)

**执行db:load_config **执行db:schema:dump

$ rake db:migrate --trace

**调用db:migrate(first_time)

**调用环境(首次)

**执行环境

**调用db:load_config(first_time)

**执行db:load_config

**执行db:migrate == CreateFundos:迁移===================================== ============

-create_table(:fundos)耙中止了! 发生错误,此错误和所有后续迁移被取消:PG :: DuplicateTable:错误:关系“ fundos”已存在CREATE TABLE“ fundos”(“ id”串行主键,“ created_at”时间戳,“ updated_at”时间戳)

看来Rails试图重新创建表。 但是我只希望它们同步,因为表已经存在!

如果使用rails g model为现有表创建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)

在创建表之前。

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

cd db /迁移/

ls | 切-d'_'f1 | 边读边; 捆绑exec rake db:migrate:up VERSION = $ line; DONE

运行文件中的所有迁移

-create_table(:fundos)耙中止了! 发生错误,此错误和所有后来的>迁移取消:PG :: DuplicateTable:错误:关系“ fundos”已经存在> CREATE TABLE“ fundos”(“ id”串行主键,“ created_at”时间戳,>“ updated_at”时间戳)

我要做的是转到db / migrate,然后转到发生create_table(:fundos)的那个迁移文件。 注释掉该行。 再试一次,如果再次引发错误,请检查错误并找到有问题的代码。 然后将其注释掉,并继续进行直到完成为止。 一旦通过,请取消注释所有内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM