[英]Ruby on Rails Request/Query Timeout
我有一個已經運行了一段時間的Rails應用程序。 現在,我在生產中遇到問題,因為請求檢索超時。 由於數據庫僅重12MB,這似乎很奇怪。
我安裝了pg_hero
,並更改了數據庫配置,但是,這不能解決問題。
在Gemfile中,重要的寶石如下
gem 'rails', '5.0.1'
gem 'pg', '0.18.4'
gem 'ransack', '1.8.0'
gem 'autonumeric-rails', '1.9.43'
gem 'axlsx', '2.0.1'
gem 'axlsx_rails', '0.5.2'
gem 'pghero'
gem 'pg_query', '>= 0.9.0'
這是控制器中的代碼
def download
@q = current_consultant.admin? ? @q = Task.ransack(params[:q]) : @q = Task.where(:consultant_id => current_consultant.id).ransack(params[:q])
@q.sorts = ['task_date desc'] if @q.sorts.empty?
@tasks = @q.result(distinct: true)
render xlsx: "tasks", template: "/tasks/download.xlsx.axlsx"
end
這是模型中的代碼
def self.worked(id)
query_sql ="
SELECT
consultants.id as consultant_id,
clients.name as client,
categories.name as category_name,
tasks.task_date as start_time,
SUM(tasks.hours * 60 + tasks.minutes) as name
FROM consultants
INNER JOIN tasks ON consultants.id = tasks.consultant_id
INNER JOIN clients ON tasks.client_id = clients.id
INNER JOIN categories ON tasks.category_id = categories.id
WHERE consultants.id = #{id}
GROUP BY clients.id, consultants.id, tasks.task_date, categories.id;
"
Consultant.find_by_sql(query_sql)
end
這是axlsx文件
wb = xlsx_package.workbook
wb.add_worksheet(name: "Carga de Horas") do |sheet|
title = sheet.styles.add_style(:bg_color => "55FF0000", :fg_color=>"FFFFFFFF", :border=>Axlsx::STYLE_THIN_BORDER, :alignment=>{:horizontal => :center})
time_title = sheet.styles.add_style(:bg_color => "55FF0000", :fg_color=>"FFFFFFFF", :border=>Axlsx::STYLE_THIN_BORDER, :alignment=>{:horizontal => :center}, :num_fmt => 46)
text = sheet.styles.add_style(:alignment=>{:horizontal => :center})
date = wb.styles.add_style :num_fmt => 15
time = wb.styles.add_style :num_fmt => 20
currency = wb.styles.add_style :num_fmt => 5
sheet.add_row [
"Consultor",
"Recurrente",
"Cliente",
"Fecha",
"Duración",
"Sector",
"Tarea",
"Comentarios"
], :style => title
@tasks.each do |task|
sheet.add_row [
task.consultant.full_name,
"=IF(#{task.recurrent},\"SI\",\"NO\")",
task.client.name,
task.task_date,
"=#{task.duration}/1440",
task.category.name,
task.subcategory.name,
task.comments
], :style => [
text,
text,
text,
date,
time,
text,
text,
text
]
end
range_amount = "E2:E#{@tasks.size+1}"
range_iva = "F2:F#{@tasks.size+1}"
sheet.add_row ["Total", nil, nil, nil, "=SUM(#{range_amount})", nil, nil, nil], :style => [title, title, title, title, time_title, title, title, title]
end
來自的行數
consultans -> 25
tasks -> 14420
clients -> 133
categories -> 4
subcategories -> 49
在數據庫中執行的查詢持續約70秒
我不確定是否有辦法解決這個問題
您是否使用nginx或Apache作為轉發代理? 通常,它們有一個默認的超時窗口〜60秒,可以匹配此行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.