【问题标题】:PGError: ERROR: relation "users" does not exist - Rails Tutorial 2nd Edition Chapter 9 HerokuPGError:错误:关系“用户”不存在 - Rails 教程第 2 版第 9 章 Heroku
【发布时间】:2012-04-27 08:41:07
【问题描述】:

在 Hartl 的 Rails 教程(第 2 版)第 9 章末尾,使用 rake 任务填充 db 时遇到错误。最终解决了它,但不知道出了什么问题。如果其他人遇到此错误,这就是我所做的。如果有人知道出了什么问题,请发表评论——我很想知道。谢谢!

运行这些命令

$ git push heroku
$ heroku run rake db:migrate
$ heroku pg:reset SHARED_DATABASE --confirm <name-heroku-gave-to-your-app>
$ heroku run rake db:populate

然后,得到这个错误:

rake aborted!
PGError: ERROR:  relation "users" does not exist
:             SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull
              FROM pg_attribute a LEFT JOIN pg_attrdef d
                ON a.attrelid = d.adrelid AND a.attnum = d.adnum
             WHERE a.attrelid = '"users"'::regclass
               AND a.attnum > 0 AND NOT a.attisdropped
             ORDER BY a.attnum

Tasks: TOP => db:populate
(See full trace by running task with --trace)

无法弄清楚出了什么问题。然后看到了这个帖子: Heroku Postgres Error: PGError: ERROR: relation "organizations" does not exist (ActiveRecord::StatementInvalid)

从那以后,我只运行了这些命令:

heroku run rake db:reset
heroku run rake db:migrate
heroku run rake db:populate

现在该应用程序正在运行。我仍然不清楚为什么我在重置 SHARED_DATABASE 时遇到了这个错误......如果有人知道,很想知道。

【问题讨论】:

  • 在调用 db:migrate 之后调用 pg:reset 会清空您的数据库并重置所有迁移。第二次,当您迁移 after 重置时,您尝试填充的表实际上应该已经存在 :^)
  • rjz,你应该这样回答。
  • 啊,谢谢 rjz。这就说得通了。你知道heroku pg:reset SHARED_DATABASE --confirm &lt;name-heroku-gave-to-your-app&gt; ...和heroku run rake db:reset之间的区别吗?
  • 它们应该是一样的。 Heroku 上的 db:reset 出现错误。首先进行重置以删除所有表并从头开始。 db:migrate 运行迁移。 db:populate 添加样本数据。在您的开发中,运行 db:test:prepare 将 db 表(不是数据)复制到测试环境。
  • 有同样的问题,但在带 pg 的 DEV 中。使用 EricM 对 db:test:prepare 的建议。问题解决了。见stackoverflow.com/questions/9562159/…

标签: heroku ruby-on-rails-3.2 railstutorial.org pg


【解决方案1】:

万一其他人遇到此问题,则存在具有相同症状的不同问题。如果您有一个未迁移的表,该表还具有在 application.rb 中设置的 AR 观察者,则 rake 将不会加载,因为它会尝试加载正在观察的底层模型。您必须迁移,然后将 AR 观察者添加到 application.rb。

【讨论】:

    【解决方案2】:

    我遇到了完全相同的问题,但以正确的顺序执行了命令。必须在所有 rake 命令之后运行以下命令,然后它就可以正常工作了。

    $ heroku restart
    

    【讨论】:

    • $ heroku run rake db:migrate $ heroku restart 你很好。
    【解决方案3】:

    您的步骤有问题。它们应该是:

    $ git push heroku
    $ heroku pg:reset SHARED_DATABASE --confirm <name-heroku-gave-to-your-app>
    $ heroku run rake db:migrate
    $ heroku run rake db:populate
    

    给@rjz 的帽子提示

    【讨论】:

    • 如果那是生产数据库怎么办...无法重置=S
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    相关资源
    最近更新 更多