2012-01-07 132 views
1

我有一个函数:变SQL查询结果

def self.run_all_scheduled_reports 
      scheduled_queries = Reports.find(
       :all, 
       :joins=> 'INNER JOIN `expected_times` 
       ON (`reports`.`report_id` =`expected_times`.`report_id`)') 

      if scheduled_queries.empty? 
       print "No reports to run at this time ("+Time.now.to_s+")" 
      else 
       caught_exception = false 
       ActiveRecord::Base.connection.execute("SET SESSION WAIT_TIMEOUT=2400"); 
       scheduled_queries.each do |query| 
        begin 
         print "Running report ("+query[:id].to_s+")...\n" 
         self.run_report(query[:id]) 
        rescue Exception => e 
         caught_exception = true 
         print e 
        end 
       end 
       raise "At least one query resulted in an Exception!" if caught_exception 
      end 
     end 

奇怪的是,当我连续运行此功能(通过脚本/亚军-e ...),结果发生变化。有时会打印大约30份报告,有时仅打印15份报告(有时根本没有返回结果)。你们有什么想法发生了什么?我的数据库是MYSQL。另外,如果我将环境更改为“开发”,或者如果我省略了JOIN部分,那么它的工作状况相当不错。

+0

是否有其他改变数据库?你有没有在MySQL shell中试过你的查询? – 2012-01-07 05:58:18

+0

您是否试过在调试器模式下单步执行代码?我曾经见过一些情况,在一些奇怪的情况下,在rails栈中静静地吃掉异常。 – Nick 2012-01-07 08:23:09

+0

@ muistooshort - 数据库本身驻留在服务器中,因此很可能有读写操作,但是我是唯一一个访问上面使用的表的人。是的,我试图喂养MYSQL原始查询 - 结果是好的。 – 2012-01-08 14:29:55

回答

1

我刚刚解决了这个问题,发生了不一致,因为显然,我的rails被设置为使用单独的层/框架来执行数据库事务。这个中间层从2个独立的MYSQL框中随机读取,结果不同步。一旦我同步了2盒,问题就解决了。感谢所有的帮助