代码之家  ›  专栏  ›  技术社区  ›  bo-oz

运行db:migrate会在生产中引起一些“验证”,这可以关闭吗?

  •  0
  • bo-oz  · 技术社区  · 10 年前

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

    • 我为一个帖子模型创建了一个迁移,并且已经定义了与一个(当时)不存在的评论模型的关系。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 回复  |  直到 10 年前
        1
  •  1
  •   Ben Toogood    10 年前

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

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

        2
  •  0
  •   mtkcs    10 年前

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

    一个更好的解决方案是在本地模拟生产环境,并在升级之前使其工作。