如标题中所述,我的Rails应用程序中有一个迁移,可以创建一个表。我们有一个Postgres数据库。当我在开发中运行迁移时,它失败了:
ActiveRecord::StatementInvalid: PG::Error: ERROR: current transaction is aborted, commands ignored until end of transaction block
: CREATE TABLE "feedback_questions" ("id" serial primary key, "survey_id" integer, "question_text" text, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)
迁移过程很长,但首先要做的是创建表。它看起来像这样:
def up
create_table :feedback_questions do |t|
t.integer :survey_id
t.text :question_text
t.timestamps
end
# ...
end
在我看来,这不是迁移的问题,而是数据库的问题(错误来自PG)。错误消息类似于这个问题,但它并没有说明出了什么问题 - 只是有一个错误。(此外,该表尚不存在;我已经检查过了。
如何获取更多数据来调试此问题?
错误消息是一条红鲱鱼。问题不在于表创建;问题在于迁移本身的格式。我在迁移中定义了几个模型,这些模型使用 #up
方法中创建的表。当 rake 尝试开始迁移时,它会查找这些行的表,并在找不到它们时翻转。create
语句恰好是错误后未运行的第一个命令。