【发布时间】: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 <name-heroku-gave-to-your-app>...和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