我正在推动一个有效的应用程序(在本地开发)到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")
答案 0 :(得分:1)
不需要外键约束。我总是建议您在本地主机上使用与生产服务器上相同的数据库。
删除外键,部署并且迁移将起作用:)
答案 1 :(得分:0)
我认为问题来自foreign_key
约束,您可以将其删除并再次检查。
更好的解决方案是在本地模仿生产环境,并在推升之前使其正常工作。