【发布时间】:2013-09-12 17:58:34
【问题描述】:
我们使用 heroku 作为部署服务。我们的 postgres 附加计划是 400 mb 内存限制的起重机,我们的数据库中有 460MB 数据。直到 2 天前,有时 postgres 服务器开始响应空结果集。
这是一个关于这种情况的例子 我们的 Entry 模型有一个属性,并且在保存回调后,它将条目号分配给条目对象,但该条目号与 object_id 不同。 这是我们的回调方法。
def assign_entry_no
return true unless self.new_record? && !self.project.nil?
last_entry = Entry.where(:project_id => self.project_id).last
self.entry_no = last_entry.nil? ? 1 : (last_entry.entry_no + 1)
end
这是输出。
object_id -> id
---------|----
677467 -> 3
677466 -> 2
677465 -> 1 // empty result set
677462 -> 3
677461 -> 2
677460 -> 1 // empty result set
677459 -> 31
677458 -> 30
677457 -> 29
如您所见,有时 postgres 服务器返回空结果集。 我们认为如果我们将附加计划升级到 800 mb,我们将解决问题。 有没有人遇到过这个问题,是postgres服务器还是其他的问题?
我们的系统 => rails 3.0.2,mri ruby 1.9.3
【问题讨论】:
-
当你说
last_entry时,你的意思是获取最新的条目吗?如果是这样,以下行不保证为您提供最新行last_entry = Entry.where(:project_id => self.project_id).last。您必须订购这样的结果last_entry = Entry.where(:project_id => self.project_id).order('created_at desc').last -
你看清楚我们的回调代码了吗?如果没有记录,则此代码为条目编号分配 1。
-
是的,我看到你正在处理没有记录的情况。我的观点是,当有一些记录时,查询不一定返回 LATEST 记录,因为您没有按时间排序。
标签: ruby-on-rails ruby ruby-on-rails-3 heroku heroku-postgres