Запрос Ruby on Rails / Тайм-аут запроса - PullRequest
0 голосов
/ 09 января 2019

У меня есть Rails-приложение, которое оно работает некоторое время. Сейчас я Я столкнулся с проблемой в производстве, потому что запрос получает тайм-аут. Это кажется странным, поскольку база данных весит всего 12 МБ.

Я установил 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 секунд

Я не уверен, есть ли способ исправить это

1 Ответ

0 голосов
/ 09 января 2019

Используете ли вы nginx или apache в качестве прямого прокси? Обычно у них есть время ожидания по умолчанию ~ 60 секунд, которое соответствует этому поведению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...