2012-01-07 5 views
1

У меня есть функция:Различная SQL Query Result в Ruby On Rails

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? –

+0

Вы пробовали переходить через код в режиме отладчика? Я видел случаи, когда исключение ели в решетке в молчании в некоторых странных случаях. – Nick

+0

@muistooshort - сама база данных живет на сервере, поэтому, скорее всего, есть записи и записи, но я единственный, кто обращается к таблицам, используемым выше. Да, ive попытался подавать сырые запросы MYSQL - результаты хороши. –

ответ

1

Я только что решил проблему, возникает несогласованность, потому что, по-видимому, мои рельсы настроены на использование отдельного уровня/рамки для выполнения транзакций db. Этот средний уровень случайным образом считывает из двух отдельных блоков MYSQL, которые оказались не синхронизированными. Как только я синхронизировал 2 блока, проблема была исправлена. Спасибо за всю помощь