2016-08-19 4 views
0

테이블의 모든 레코드에 대해 계산을 실행하려고합니다. 그러나 find_each를 사용하여 테이블의 모든 항목을 반복 할 때 어떤 이유로 레코드가 각각 반환되지 않습니다.레일 find_each 및 각 레코드를 반환하지 않습니다

나는 100 개의 레코드가 몇 개있는 지역에서는 발생하지 않습니다. 그러나 Heroku에서 실행하려고 할 때마다 일부 레코드를 건너 뛰는 것 같습니다.

처리되지 않는 개별 레코드에 대해 코드를 실행하려고했는데 예상대로 처리됩니다. 그러나 find_each 루프에 넣으면 작동하지 않습니다.

IneventoryRecord.all.each를 사용해 보았지만 같은 문제가있는 것 같습니다.

나는 또한 결과에 나타나지 않았지만 어떤 항목도 인쇄되지 않았기 때문에 어떤 이유로 레코드가 건너 뛴 것처럼 보입니다.

내가 뭘 잘못하고 있을지 모르겠다.

코드

class InventoryReportTable::AverageForecast 

def generate 
    iterate_inventory_reports 
end 

private 
def iterate_inventory_reports 
    InventoryReport.find_each do |inventory_report| 

     average_lag_1_forecast = average_three_month_forecast(inventory_report.product_number, 1) 
     average_lag_2_forecast = average_three_month_forecast(inventory_report.product_number, 2) 

     inventory_report.average_lag_1_forecast = average_lag_1_forecast 
     inventory_report.average_lag_2_forecast = average_lag_2_forecast 
     inventory_report.save 
    end 
end 

def forecasts(product_number, lag) 
    extract_date_target_month_start = current_month_beginning - lag.month 
    Forecast 
     .where(extract_date: extract_date_target_month_start..extract_date_target_month_start.end_of_month) 
     .where(final: true) 
     .where(product_number: product_number) 
     .where(month: current_month_beginning..(current_month_beginning + 3.months) - 1.day) 
     .group(:month) 
     .sum(:quantity) 
end 

def average_three_month_forecast(product_number, lag) 
    hash_helper = Helpers::Hash.new 
    return hash_helper.average_hash(forecasts(product_number, lag))  
end 

# Helper methods 
def current_month_beginning 
    Date.today.beginning_of_month 
end 

def days_in_a_month 
    return 20 
end 

end 

편집 나는 문제가 자리하고있는 곳 내가 알아낼 수 있는지 확인하기 위해 몇 가지 더 테스트를 실시했다.

나는이 유효하지 않은 문자가 문제의 원인이 있는지 확인하기 위해 간단한

InventoryReport.find_each do |inventory_report| 
    puts inventory_report.product_number 
end 

루프를 실행하지만이 경우 될 것 같지 않았다.

또한 product_number에 후행 또는 선행 공백이 없는지 확인하여 찾을 수 없습니다.

+0

"보인다"라고 쓰면 100 % 확실하지 않다고 생각합니까? 이게 사실이라고 생각하니? 또한 어떤 데이터베이스를 사용하고 있으며 어떤 종류의 기본 키/인덱스가'InventoryReport' 모델에 있습니까? –

+0

Excel에서 계산을하고 데이터베이스에 저장된 계산과 대조하여 숫자가 꺼지면 데이터베이스의 값이 Excel에서 얻는 값보다 훨씬 적습니다. 그런 다음 데이터베이스에있는 데이터를 검사하면 거기에 실제 숫자가 있어야 할 때 여전히 값이없는 레코드가 있습니다. – Pras

+0

어떤 데이터베이스와 유형의 기본 키를 사용하고 있습니까? 일괄 키가 주문 가능할 때만 일괄 처리가 작동하며 블록 내부의'InventoryReport'를 수정하면 다음 일괄 처리에 대한 질의가 발생합니다. –

답변

0

나는 마침내 잘못되어 가고있는 것을 알아 냈습니다. 나는이 코드를 Heroku에서 실행하기 위해 갈퀴를 사용하고있었습니다. InventoryReport 테이블은 꽤 커서 rake는 Heroku에서 시간 초과되었습니다. 그것은 오류를 던지지는 않았지만.

코드를 백그라운드 작업으로 옮겨서 완벽하게 작동했습니다.

관련 문제