一千萬個為什麽

搜索

為什麽在Rails中while while + sleep + ActiveRecord.find不應該返回記錄呢?

我正在嘗試在我的Rails應用程序中實現一個彗星方法。我有以下內容:

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

現在,當我手動轉到URL時,它會在那裏等待10秒並按預期超時。如果我修改我的數據庫以便Something.find()返回記錄然後再次轉到URL,則調用立即返回。

但是,如果我轉到URL,然後我快速在數據庫上運行更新,以便Something.find()應該找到記錄,它只是坐在那裏直到它在10秒後超時。我希望在我做出更改並返回之後,它應該立即看到對數據庫的更改。

有什麽想法嗎?我也願意接受有關改進的建議。

最佳答案

這是因為您的查詢默認是緩存的。嘗試這個:

records = Something.uncached{Something.find(:all,
            :conditions => { :some_condition => false})}

Reference: Article 1

轉載註明原文: 為什麽在Rails中while while + sleep + ActiveRecord.find不應該返回記錄呢?