解释这个ActiveRecord错误

时间:2014-05-07 23:16:21

标签: ruby-on-rails

PG::InFailedSqlTransaction: ERROR: current transaction is aborted, commands ignored until end of transaction block : SELECT "discussions".* FROM "discussions" WHERE "discussions"."id" = $1 ORDER BY "discussions"."id" ASC LIMIT 1

这个错误在普通英语中实际意味着什么?

以下是导致错误的代码:

self.discussion.forum.update_attributes(reply_count: self.discussion.forum.reply_count + 1 )

为什么您认为这会导致服务器上的错误而不是本地错误?我在本地运行生产和开发模式,并没有出现此问题的提示。在服务器上,它返回此错误。

在服务器上:

git log
commit d41d8cd98f00b204e9800998ecf8427e
git status
# On branch master
nothing to commit, working directory clean

本地:

git log
commit d41d8cd98f00b204e9800998ecf8427e
git status
# On branch master
nothing to commit, working directory clean

这一切都如此相同,我想尖叫。

我只能想到它必须是数据库中的东西,但我不知道它会导致这样的错误是什么或为什么......

值得注意的是,除了导致错误的一行代码之外,整个应用程序与数据库完美交互。很奇怪。

更新

我修复了错误,重新启动了我的puma应用程序服务器。这很好,但我根本不理解这个错误。如果有人能够启发我所以这个问题在应用程序运行时不会再次出现我将非常感激。

1 个答案:

答案 0 :(得分:1)

错误消息未提供任何详细信息。它只是说SQL事务失败了。这可以翻译为:

  

我试图以精确的顺​​序执行一系列操作,但是一个失败了,我正在中止并恢复整个序列

IS SQL事务的预期行为。

对于具体错误的问题,该消息没有说明。您应该查看错误回溯,并查看涉及的其他文件(和行)。


为什么重启Puma解决了它

你可能还没有重新启动Puma,它仍在运行你的应用程序的先前版本(无论Ruby文件的提交是什么)。也许您已经在服务器上运行了数据库迁移,因此数据库中的表与应用程序的运行副本中加载的模型之间存在不匹配。