Rake db:针对现有数据库的迁移

时间:2014-03-13 03:12:13

标签: ruby-on-rails rake

我有一个新的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正在尝试重新创建表格。但我只是想让它们同步,因为桌子已经存在了!

4 个答案:

答案 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)发生的迁移文件。排队的评论。再试一次,如果再次抛出错误,请检查错误并找到有问题的代码。然后评论出来并继续这样做直到它通过。一旦它通过,取消评论一切。