Rails 数据库结果不一致

Rails Inconsistent database results

我有一个 Rails 应用程序,其中有一个在 table 上创建元素的请求,另一个正在等待,读取是否创建了此类元素。

现在,我检查实时数据,等待过程从未看到 table 的任何新记录。

关于如何强制重新连接或任何更新模型引用的想法?

基本思路:

如果有任何见解,我将不胜感激。

看起来,对于 运行ning Rails 应用程序,如果 运行ning 一段代码正在寻找已被新请求更新的任何内容,则在第一次开始执行,更新的数据不会显示,使用 active_record 模型。

解决方案:只是 运行 原始查询。

sql = "SELECT * FROM entities WHERE key = '"+key+"' ORDER BY ID DESC LIMIT 1;" records_array = ActiveRecord::Base.connection.execute(sql).values

我知道这是一个巨大的过度简化,可能存在潜在的问题,但它确实解决了它。

等待的请求可能正在使用 ActiveRecord 缓存。 Rails 在请求期间缓存查询,因此如果您 运行 在同一个请求中多次执行完全相同的查询,它只会在第一次访问数据库。

你可以在控制台模拟一下:

Entity.cache { Entity.first; Entity.first }

在日志中,您会看到类似这样的内容(注意第二个请求显示 CACHE):

[2018-12-06T10:51:02.436 DEBUG (1476) #] Entity Load (4.9ms)  SELECT "entities".* FROM "entities" LIMIT 1
[2018-12-06T10:51:02.450 DEBUG (1476) #] CACHE (0.0ms)  SELECT "entities".* FROM "entities" LIMIT 1

要绕过缓存,可以使用:

Entity.uncached { Entity.where(key: @key)&.last }

使用 uncached 将禁用块内的缓存,即使封闭范围 运行ning 在 cached 块内也是如此。