簡體   English   中英

Ruby on Rails請求/查詢超時

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM