具有活动存储的高响应时间

问题描述 投票:0回答:1

我正在使用active_storageHeroku的网页上存储和检索三个图。检索图的代码是

image_tag plot.variant(resize: '500x500'), class: 'r_plot'

每个图都很小,大约500 KB。我经常从Logentries heroku加载项中看到以下错误:

High Response Time: Heroku/Syslog drain
    2020-05-30 21:39:37.733
    671 <158>1 2020-05-30T21:39:35.184905+00:00 heroku router - - at=info method=GET path="/rails/active_storage/representations/long_token/-tmp-plotsPlotname" host=cvd-tracker.herokuapp.com request_id=some_id fwd="ip_address" dyno=web.1 connect=0ms service=5015ms status=302 bytes=1679 protocol=https

为什么要花费这么长时间检索这些图?

ruby-on-rails rails-activestorage
1个回答
0
投票

可能是几件事情:

  1. 这些变体是由服务器根据需要创建的,因此第一次调用它可能需要一些时间和相当数量的资源才能完成。
  2. Heroku有一个临时文件系统,这意味着如果您将这些变体存储在本地,那么在每次新的部署或引起动态变化的其他事件之后,先前创建的变体将被销毁,因此下次调用它时,您将必须经过再次执行上一步。
  3. 如果您不是在本地存储变体,那么您的测功机可能太小,这意味着服务器内存不足,必须使用交换空间来完成变体处理?

听起来是否其中任何一种适用于您的情况?

编辑-后台处理:

似乎是在调用processed时触发了实际处理,因此您可以在rake任务中执行以下操作:

upload = Upload.find(upload_id)
variant = upload.image.variant(options)
was_processed = variant.processed
Rails.logger.info "Processed variant for #{upload.id}" if was_processed

我发现了上述内容以及其他一些技巧here

© www.soinside.com 2019 - 2024. All rights reserved.