运行db:migrate会导致一些'验证'关于生产,是否可以关闭?

时间:2016-01-19 14:38:54

标签: ruby-on-rails postgresql heroku

我正在推动一个有效的应用程序(在本地开发)到Heroku环境。当尝试在生产环境中运行db:migrate时,迁移失败,因为postgreSQL似乎正在进行一些完整性检查,我的sqlite在localhost上没有做,例如:

  • 我为帖子模型创建了一个迁移,并且已经定义了与(此时)非现有评论模型的关系。 Postgre抱怨表评论不存在。 (通过重新安排迁移来解决这个问题,我知道不好)

  • 我在模型中使用了一种STI技巧,即模型练习,视频&课程全部将他们的数据存储在同一个表中(步骤)。练习有许多问题,但在尝试创建表格时,Postgre抱怨缺少桌面练习。

有没有办法解决第二个错误,或者是否有一般方法可以防止rails进行健全性检查(相关表是否存在)?

编辑:

好的,所以相关的迁移是这样的:

class CreateQuestions < ActiveRecord::Migration
  def change
    create_table :questions do |t|
      t.string :title
      t.references :exercise, index: true, foreign_key: true
      t.text :content

      t.timestamps null: false
    end
  end
end

问题在于没有表exercises,因为那个名为steps。因此,PostgreSQL违反了参照完整性,导致以下错误:

== 20151208132820 CreateQuestions: migrating ==================================
-- create_table(:questions)
   (14.1ms)  CREATE TABLE "questions" ("id" serial primary key, "title" character varying, "exercise_id" integer, "content" text, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)
   (5.2ms)  CREATE  INDEX  "index_questions_on_exercise_id" ON "questions"  ("exercise_id")
   (9.3ms)  ALTER TABLE "questions" ADD CONSTRAINT "fk_rails_5ba13b3a6e"
FOREIGN KEY ("exercise_id")
  REFERENCES "exercises" ("id")

PG::UndefinedTable: ERROR:  relation "exercises" does not exist
: ALTER TABLE "questions" ADD CONSTRAINT "fk_rails_5ba13b3a6e"
FOREIGN KEY ("exercise_id")
  REFERENCES "exercises" ("id")

2 个答案:

答案 0 :(得分:1)

不需要外键约束。我总是建议您在本地主机上使用与生产服务器上相同的数据库。

删除外键,部署并且迁移将起作用:)

答案 1 :(得分:0)

我认为问题来自foreign_key约束,您可以将其删除并再次检查。

更好的解决方案是在本地模仿生产环境,并在推升之前使其正常工作。