我有一个问题,即ActivereCord.Find返回错误的行,但仅在生产中。这是一些示例代码:

    <% puts group_hash %>
    <% puts Group.find(group_hash['id'].to_i).inspect %>

输出:(除“ ID”以外的所有属性都已被截断以可读性)

    {"id"=>550058, ....}
    #<Group id: 265492, ...>

group.find(550058)如何产生ID 265492的记录?

我相信在几个地方正在发生类似的问题。似乎在最近加载记录时(在上述样本中,该组以前已在控制器中加载),因此我怀疑缓存。

该代码在Rails3下运行良好,在部署了Rails4时,此问题就会发生。不幸的是,我无法在任何非生产环境中重现该问题(即使在单独的主机上的完整生产克隆中,指向生产数据库),因此服务器负载可能是一个促成因素。

有任何想法吗?

有帮助吗?

解决方案

我设法解决了这个问题。我仍然不知道上述如何或为什么会发生(肯定 m = Model.find(id); (id == m.id) 应该永远是真的!),尽管我仍然怀疑缓存,因为似乎只有在缓存被启动时才会发生。

我做了以下操作,我相信这些步骤中的某些事情解决了这个问题:

  1. 修剪我 Gemfile 删除一些未使用的宝石,例如Dalli,并删除除几种情况以允许更新的情况下的版本约束。
  2. bundle update 导致许多更新的依赖关系
  3. 我在Heroku上使用了一个自定义的BuildPack(从官方Ruby One分叉),我在过去几个月的上游变化中拉了。

感谢所有阅读和评论的人。我想我的宝石依赖性或Heroku环境中有些不对劲。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top