我有一个新的rails应用程序,它将从现有的DB(由另一个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)
**调用环境(first_time)
**执行环境
**调用db:load_config(first_time)
**执行db:load_config **执行db:schema:dump
$ rake db:migrate --trace
**调用db:migrate(first_time)
**调用环境(first_time)
**执行环境
**调用db:load_config(first_time)
**执行db:load_config
**执行db:migrate == CreateFundos:迁移============================================= ==
- create_table(:fundos)rake aborted!发生错误,此以及所有后续迁移都已取消:PG :: DuplicateTable:ERROR:relation " fundos"已存在CREATE TABLE" fundos" (" id"序列主要 key," created_at"时间戳," updated_at"时间戳)
似乎rails正在尝试重新创建表格。但我只是想让它们同步,因为桌子已经存在了!
答案 0 :(得分:2)
如果使用rails g model
为现有表创建模型,只需删除创建的迁移文件。
表模式将在schema.rb中正确转储,因此即使没有迁移文件,也始终可以在具有rake db:setup
的其他计算机上从头开始创建。
您可以使用rake db:schema:dump
手动更新schema.rb。
答案 1 :(得分:1)
您想要执行大量迁移文件吗?如果不是太多,您可以通过
执行特定版本的迁移rake db:migrate:redo VERSION=version
如果要创建表的迁移文件不是太多,也许您可以通过添加:
来编辑迁移文件 if ActiveRecord::Base.connection.table_exists?(table_name)
在创建表之前。
在您的本地环境中,也许您可以删除不必要的文件。
答案 2 :(得分:1)
cd db / migrate /
ls |切-d' _' f1 |读线;捆绑exec rake db:migrate:up VERSION = $ line;完成
运行文件
中的所有迁移答案 3 :(得分:0)
- create_table(:fundos)rake aborted!发生错误,此以及之后的所有>迁移都已取消:PG :: DuplicateTable:错误:关系“fundos”已存在> CREATE TABLE“fundos”(“id”序列主键,“created_at”时间戳,>“ updated_at“timestamp)
我要做的是转到db / migrate并转到create_table(:fundos)发生的迁移文件。排队的评论。再试一次,如果再次抛出错误,请检查错误并找到有问题的代码。然后评论出来并继续这样做直到它通过。一旦它通过,取消评论一切。