Rake db:migration against an existing DB
我有一个新的rails应用程序将从现有的DB(由另一个ruby应用程序创建)消耗。
为此,我为已经存在的数据库表创建了一个模型,但是现在rails给了我必须运行的错误消息
1 | rake db:migration |
但是如果我尝试这样做,我会收到错误,因为该表已经存在。
有没有办法执行迁移并忽略现有表?该表是正确的,应该在那里,并填充了另一个应用程序的数据。我想让这个应用程序使用这些信息。
谢谢
编辑:
数据库设置很好,因为我之前能够执行db:migrations。我使用创建了模型
1 | rails g model fundo |
(fundo是模型的名称,fundoS是表的名称)
该模型还没有属性,但该表有列
编辑2:
如果我使用--trace运行,这些是输出
$ rake db:schema:dump --trace
** Invoke db:schema:dump (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:schema:dump$ rake db:migrate --trace
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:migrate
== CreateFundos: migrating ===================================================-- create_table(:fundos) rake aborted! An error has occurred, this and all later migrations canceled: PG::DuplicateTable: ERROR: relation
"fundos" already exists CREATE TABLE"fundos" ("id" serial primary
key,"created_at" timestamp,"updated_at" timestamp)
似乎rails正在尝试重新创建表。但我只是想让它们同步,因为桌子已经存在了!
如果使用
表模式将在schema.rb中正确转储,因此即使没有迁移文件,也可以在其他具有
您可以使用
cd db / migrate /
ls |切-d'_'f1 |读线;捆绑exec rake db:migrate:up VERSION = $ line; DONE
运行文件中的所有迁移
你想要执行很多迁移文件吗?如果不是太多,您可以执行特定版本的迁移
1 | rake db:migrate:redo VERSION=version |
如果要创建表的迁移文件不是太多,也许您可??以通过添加以下内容来编辑迁移文件:
1 | if ActiveRecord::Base.connection.table_exists?(table_name) |
在创建表之前。
在您的本地环境中,也许您可??以删除不必要的文件。
-- create_table(:fundos) rake aborted! An error has occurred, this and all later >migrations canceled: PG::DuplicateTable: ERROR: relation"fundos" already exists >CREATE TABLE"fundos" ("id" serial primary key,"created_at" timestamp, >"updated_at" timestamp)
我要做的是转到db / migrate并转到create_table(:fundos)发生的迁移文件。排队的评论。再试一次,如果再次抛出错误,请检查错误并找到有问题的代码。然后评论出来并继续这样做直到它通过。一旦它通过,取消评论一切。