Ruby on rails 为什么while循环是+;睡眠+;Rails中的ActiveRecord.find在应该返回记录时不返回记录?
我正在尝试在Rails应用程序中实现comet方法。我有以下资料:Ruby on rails 为什么while循环是+;睡眠+;Rails中的ActiveRecord.find在应该返回记录时不返回记录?,ruby-on-rails,comet,Ruby On Rails,Comet,我正在尝试在Rails应用程序中实现comet方法。我有以下资料: def poll records = [] start_time = Time.now.to_i while records.length == 0 do records = Something.find(:all, :conditions => { :some_condition => false}) if records.length > 0 br
def poll
records = []
start_time = Time.now.to_i
while records.length == 0 do
records = Something.find(:all,
:conditions => { :some_condition => false})
if records.length > 0
break
end
sleep 1
if Time.now.to_i - start_time >= 10
break
end
end
responseData = []
records.each do |record|
responseData << {
'something' => record.some_value
}
# Flag message as received.
record.some_condition = true
record.save
end
render :text => responseData.to_json
end
def轮询
记录=[]
开始时间=time.now.to\i
而records.length==0则
记录=某物。查找(:全部,
:conditions=>{:some_condition=>false})
如果记录长度>0
打破
结束
睡眠1
如果Time.now.to_i-开始时间>=10
打破
结束
结束
响应数据=[]
记录。每个人都做记录|
响应数据记录。某些值
}
#将消息标记为已接收。
record.some_condition=true
记录。保存
结束
render:text=>responseData.to_json
结束
现在,当我手动转到URL时,它会在那里等待10秒钟,并按预期超时。如果修改数据库,使Something.find()返回记录,然后再次转到URL,则调用会立即返回
但是,如果我转到URL,然后在数据库上快速运行更新,使Something.find()能够找到记录,它就会一直放在那里,直到10秒后超时。我希望在我进行更改并返回后,它会立即看到对数据库的更改
你知道为什么吗?我也愿意接受改进建议。这是因为默认情况下会缓存查询。试试这个:
records = Something.uncached{Something.find(:all,
:conditions => { :some_condition => false})}
引用:这是因为您的查询在默认情况下是缓存的。试试这个:
records = Something.uncached{Something.find(:all,
:conditions => { :some_condition => false})}
参考: