【问题标题】:heroku deployment error ruby on rails undefinedtableheroku 部署错误 ruby​​ on rails undefinedtable
【发布时间】:2014-06-06 02:56:22
【问题描述】:

我是第一次部署我的 rails 应用程序,我收到以下错误:

迁移到 Changetimezone (20140605033929) == 20140605033929 更改时区:迁移 ==================================== -- change_column(:opportunities, :updated_at, :date) PG::UndefinedTable: ERROR: 关系“机会”不存在: ALTER TABLE "opportunities" ALTER COLUMN "updated_at" TYPE date rake 中止! StandardError: 发生错误,这个和以后的一切 迁移已取消:

PG::UndefinedTable: 错误:关系“机会”不存在

这是我的机会模型:

class Opportunity < ActiveRecord::Base
before_save :check_for_nil,:calculate_derated_value
has_many :updates, dependent: :destroy
has_many :activities, dependent: :destroy   
has_many :contacts, dependent: :destroy
has_many :links, dependent: :destroy

显然,它有关联。我不确定为什么抱怨是它没有关联......属于它的所有模型都有一个 :belongs_to 机会声明

我完全不知道会发生什么。我已经尝试搜索,但找不到任何解决此问题的解决方案.. 有人有什么想法吗??

【问题讨论】:

  • 你运行 $ heroku run rake db:setup 了吗?那个总是让我着迷。
  • 完美!!! @steel 你能向我解释为什么这样做和/或必须完成吗??
  • Heroku 会加载您的迁移,但在您告诉它之前不会运行它们。但是,您的应用程序已变得依赖于这些表的存在。所以你运行上面的代码(rake db:migrate 后跟 rake db:seed 的组合)然后 Heroku 就有了它需要的表。

标签: ruby-on-rails heroku deployment undefined


【解决方案1】:

您能否向我解释一下为什么这样做和/或必须这样做?

数据库

当您将 Rails 部署到 production 环境(本地为 development)时,建议您设置另一个数据库来处理来自用户的 production 输入。

问题是在运行rake db:migrate同时在本地和生产数据库上工作;仅适用于调用命令的环境。

这意味着如果您将代码推送到Heroku,您需要确保您已经为它运行了所有migrations;没有它们,您将无法进行所需的更改。

--

根据 cmets,调用 rake db:setup 似乎也对您有用。我不确定为什么这会对迁移起作用(因为rake db:setup 只是根据schema 文件设置数据库):

Difference between rake db:migrate db:reset and db:schema:load

  • db:migrate 运行(单个)尚未运行的迁移。
  • db:create 创建数据库
  • db:drop 删除数据库
  • db:schema:load 在 schema.rb 之后的(现有)数据库中创建表和列
  • db:setup 执行 db:create, db:schema:load, db:seed
  • db:reset 执行 db:drop, db:setup

【讨论】:

    猜你喜欢
    • 2013-05-25
    • 1970-01-01
    • 2016-12-25
    • 2023-03-31
    • 2012-05-23
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    相关资源
    最近更新 更多