什么可能导致Rails迁移失败

时间:2016-05-11 22:03:34

标签: ruby-on-rails activerecord

OS: Ubuntu 14.04
Rails: 3.2.18
Ruby: 2.15

我继承了Rails应用程序,我遇到了一些迁移问题。

当我尝试运行最新的迁移时,收到以下错误消息:

==  CreateBillingComments: migrating ==========================================
-- create_table(:billing_comments, {:id=>false})
rake aborted!
StandardError: An error has occurred, all later migrations canceled:

Mysql2::Error: Table 'billing_comments' already exists: 
CREATE TABLE `billing_comments` 

表billing_comments确实存在,但问题是我找不到任何源代码文件中的字符串billing_comments(包括迁移文件,视图,控制器,模型等)。

该表未被使用,因此我想删除它,并在代码中对它进行所有引用。我担心的是,如果我只是删除表格,我只会部分地解决问题。

我也寻找CreateBillingComments,但没有用。

运行rake db:schema:dump生成了一个新的schema.rb,其中包含以下内容:

create_table "billing_comments", :force => true do |t|
  t.string   "ticket_id"
  t.text     "content"
  t.string   "user_id"
  t.string   "slug"
  t.datetime "created_at", :null => false
  t.datetime "updated_at", :null => false
end

但这是现在出现billing_comments的唯一地方。

这些信息来自哪里?

1 个答案:

答案 0 :(得分:2)

在数据库历史记录的某个时刻,通过Rails迁移或其他方式创建了billing_comments表。您可以简单地为迁移添加一个保护,以防止重新创建表(如果已存在):

unless table_exists? :billing_comments
  create_table(:billing_comments, {:id=>false})
end

请注意,如果id列中已存在billing_comments列,您可能仍需要将其删除。