变SQL查询结果
问题描述:
我有一个函数:变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部分,那么它的工作状况相当不错。
答
我刚刚解决了这个问题,发生了不一致,因为显然,我的rails被设置为使用单独的层/框架来执行数据库事务。这个中间层从2个独立的MYSQL框中随机读取,结果不同步。一旦我同步了2盒,问题就解决了。感谢所有的帮助
是否有其他改变数据库?你有没有在MySQL shell中试过你的查询? – 2012-01-07 05:58:18
您是否试过在调试器模式下单步执行代码?我曾经见过一些情况,在一些奇怪的情况下,在rails栈中静静地吃掉异常。 – Nick 2012-01-07 08:23:09
@ muistooshort - 数据库本身驻留在服务器中,因此很可能有读写操作,但是我是唯一一个访问上面使用的表的人。是的,我试图喂养MYSQL原始查询 - 结果是好的。 – 2012-01-08 14:29:55