当前位置: 首页 > 知识库问答 >
问题:

Rails:生产环境中不存在引用类名的关系

公良鸿畅
2023-03-14

我在迁移中创建了两个引用,它们是对我的User表引用的别名:

class CreateInvitations < ActiveRecord::Migration[5.0]
  def change
    create_table :invitations do |t|
      t.references :owner, references: :user, foreign_key: true # the owner
      t.references :invitee, references: :user, foreign_key: true # the invitee
      t.references :core_bot, foreign_key: true # the associated page (core_bot_active)
      t.string :email
      t.string :token

      t.timestamps

    end
  end
end

在我的用户模型中:

  has_many :invitations, foreign_key: :owner_id
  has_many :invitations, foreign_key: :invitee_id, dependent: :destroy

在我的邀请模式中:

  belongs_to :owner, class_name: :User
  belongs_to :invitee, class_name: :User

在开发中一切都很好,但当我尝试在生产中使用HerokuHeroku run rake db:migrate进行迁移时,我遇到了以下错误:

PG::未定义:错误:关系“所有者”不存在:创建表“邀请”(“id”序列主键、“所有者id”整数、“被邀请者id”整数、“core_机器人id”整数、“email”字符变化、“token”字符变化、“timestamp not NULL”创建,在“timestamp not NULL,CONSTRAINT”fk_rails_59e24979a9外键更新(“所有者id”指“所有者”(“id”),约束“fk_rails_00204dc74b”外键(“被邀请者id”)指“被邀请者”(“id”),约束“fk_rails_34505bdb65”外键(“核心机器人id”)指“核心机器人”(“id”))

我尝试没有引用::用户,但我得到相同的错误。

知道这里怎么了吗?


共有3个答案

姚德容
2023-03-14

尝试从选项中删除foreign_key:true,因为我们给它一个参考,我认为我们不需要foreign_key:true选项

class CreateInvitations < ActiveRecord::Migration[5.0]
  def change
    create_table :invitations do |t|
      t.references :owner, # the owner
      t.references :invitee, # the invitee
      t.references :core_bot # the associated page (core_bot_active)
      t.string :email
      t.string :token

      t.timestamps

    end
  end
end
章锦
2023-03-14

我不知道如何解决你的问题。但我总是用外键为Postgres DB创建迁移,如下所示:

  def change
    create_table :invitations do |t|
      t.integer :owner_id
      t.integer :invitee_id
      t.references :core_bot, foreign_key: true # the associated page (core_bot_active)
      t.string :email
      t.string :token

      t.timestamps    
    end
    add_index :invitations, :owner_id 
    add_foreign_key :invitations, :users, column: :owner_id
    add_index :invitations, :invitee_id 
    add_foreign_key :invitations, :users, column: :invitee_id
  end
赵奕
2023-03-14

您的开发可能是一个sqLite数据库,但Heroku使用PostgreSQL,对迁移的解释是为所有者生成一个外键

这样写迁移...

class CreateInvitations < ActiveRecord::Migration[5.0]
  def change
    create_table :invitations do |t|
      t.references :owner, index: true # the owner
      t.references :invitee, index: true # the invitee
      t.references :core_bot, foreign_key: true # the associated page (core_bot_active)
      t.string :email
      t.string :token

      t.timestamps

    end
    add_foreign_key :invitations, :users, column: :owner_id
    add_foreign_key :invitations, :users, column: :invitee_id
  end
end

这是使用不同于生产实现的数据库产品进行开发的风险之一。迁移的效果可能并不完全相同。如果计划部署到Heroku,您应该考虑在开发中使用postgreSQL。

 类似资料:
  • 生产中的EAP EAP在默认的FreeRADIUS安装中开箱即用。但是,也有一些要点需要注意或更改以适应您的环境。在本节中,我们将介绍以下几点: 适当的公钥基础设施(PKI)的重要性 配置内部隧道虚拟服务器 内部和外部隧道识别的问题 禁用未使用的EAP方法 公共密钥基础设施简介公钥基础结构主要用于两件事: 验证某人的身份 通过不安全的连接交换安全数据 为了确保某人是他们声称的人,我们使用证书颁发机

  • Kibana 的配置很大程度上依赖于您的使用场景。如果只有自己使用,可以在自己的机器上运行 Kibana,配置它指向任何您想要交互的 Elasticsearch 实例。相反,如果有大量的 Kibana 使用者,需要多个 Kibana 实例连接至同一个 Elasticsearch 节点,来保证负载均衡。 尽管 Kibana 不是非常耗费资源,我们仍然建议运行 Kibana 的节点和 Elastics

  • 我创建了一个rails 4.1.4应用程序,试图在heroku上运行,但我得到以下错误- 缺少环境的

  • 问题内容: 我正在使用IdentityServer4和来自ASP.NET Core 3.0的React启动项目。预览4,它可以完美工作,直到构建解决方案并尝试使用dotnet命令从cmd提示符运行它为止。每次我启动应用程序时,它都会告诉我未指定密钥类型。 我没有尝试过各种有关生成证书的指南,因为我对.NET没有任何经验。我提到这一点是为了防止问题可能是由于生成证书的方式不正确引起的。 我也尝试过将

  • 引言 Sentinel 目前已可用于生产环境,除了阿里巴巴以外,也有很多企业在生产环境中广泛使用 Sentinel。 生产环境的 Sentinel Dashboard 需要具备下面几个特性: 规则管理及推送,集中管理和推送规则。sentinel-core 提供 API 和扩展接口来接收信息。开发者需要根据自己的环境,选取一个可靠的推送规则方式;同时,规则最好在控制台中集中管理。 监控,支持可靠、快

  • 问题内容: 有没有人最近在使用SQL Server数据库后端部署Django应用程序方面获得过经验?我们的工作场所在SQL Server上投入了大量资金,如果没有足够完善的后端,它将不支持Django。 我知道mssql.django-pyodbc和django- mssql是非正式支持的后端。这两个项目似乎都只有一个人供款,尽管供款似乎有些规律,但这有点令人担忧。 是否有其他受支持的SQL Se