Ruby 轨道。第一个请求太慢,超时,下一个请求更快

Ruby 轨道。第一个请求太慢,超时,下一个请求更快,ruby,caching,heroku,ruby-on-rails-5,asset-pipeline,Ruby,Caching,Heroku,Ruby On Rails 5,Asset Pipeline,我正在开发一个rails应用程序。在Heroku上毫无问题地推git后,应用程序在webbrowser中显示错误“请求超时” 如果我在1分钟后尝试,该应用程序会在webbrowser上快速显示页面 配置 请在下面找到我的配置 轨道5.1.2 psql(PostgreSQL)9.6.1 gem文件中的主要信息: ruby '2.2.6' gem 'rails', '~> 5.1.1' gem 'pg', '~> 0.18' gem 'puma', '~> 3.7' 赫

我正在开发一个rails应用程序。在Heroku上毫无问题地推git后,应用程序在webbrowser中显示错误“请求超时”

如果我在1分钟后尝试,该应用程序会在webbrowser上快速显示页面

配置

请在下面找到我的配置

  • 轨道5.1.2

  • psql(PostgreSQL)9.6.1

gem文件中的主要信息:

ruby '2.2.6'

gem 'rails', '~> 5.1.1'

gem 'pg', '~> 0.18'

gem 'puma', '~> 3.7'
赫罗库

Standard-2X dynos, Shared, 1 GB RAM

Heroku Postgres :: Brown

Memcached Cloud :free

Papertrail :free

STANDARD PLAN
日志

第一个很长请求的日志(请注意,我在测试之前重新启动服务器,以重现每天早上在第一个请求时附加的问题)

[…]渲染30个局部视图

Aug 25 03:35:38 myapplication app/web.1: I, [2017-08-25T10:35:37.495939 #19]  INFO -- : [6db31a1a-39a5-4a8f-9ba1-cf35ceae5f61] Completed 200 OK in 106826ms (Views: 106499.5ms | ActiveRecord: 50.2ms) 
如果我第二次渲染同一视图,我将获得以下日志:

Aug 25 05:42:45 myapplication app/web.1: I, [2017-08-25T12:42:44.339695 #19]  INFO -- : [9c38a6b8-73d4-4e31-9ac3-df2ec8b21049] Started GET "/projets/new" for 90.87.43.215 at 2017-08-25 12:42:44 +0000 
Aug 25 05:42:45 myapplication app/web.1: I, [2017-08-25T12:42:44.341197 #19]  INFO -- : [9c38a6b8-73d4-4e31-9ac3-df2ec8b21049] Processing by ProjetsController#new as HTML 
Aug 25 05:42:45 myapplication app/web.1: D, [2017-08-25T12:42:44.348612 #19] DEBUG -- : [9c38a6b8-73d4-4e31-9ac3-df2ec8b21049]   User Load (1.7ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2  [["id", 2], ["LIMIT", 1]] 
Aug 25 05:42:45 myapplication app/web.1: I, [2017-08-25T12:42:44.351579 #19]  INFO -- : [9c38a6b8-73d4-4e31-9ac3-df2ec8b21049] Completed 200 OK in 10ms (ActiveRecord: 1.7ms)
应用程序在第二次渲染中从一个106秒的时间跳转到一个很短的时间来处理第一个请求(即创建Heroku错误)

资产

日志显示第二次调用从请求获取资产

在我的应用程序中,我在每个页面上加载当前控制器的js:

在application.html.erb中

<%= stylesheet_link_tag controller.controller_name if TarifsDynamique::Application.assets.find_asset("#{controller.controller_name}.css") %>
<%= javascript_include_tag params[:controller] if TarifsDynamique::Application.assets.find_asset("#{controller.controller_name}.js") %> 
所有的控制器都在那里

这是工作发现(在devvellpoment和第一次呼叫后的生产中)

但当我尝试

$Heroku run assets:precompile
我犯了这个错误

Running rake assets:precompile on ⬢ myapplication... up, run.9829 (Standard-1X)
Yarn executable was not detected in the system.
Download Yarn at https://yarnpkg.com/en/docs/install
...
缓存

我尝试添加缓存以加快第一页的速度

  • 控制器内的缓存操作:

    class ProjetsController < ApplicationController
    
      caches_action :new, :edit
    
不知道

我不知道了 如果你有一个想法,它将是如此的有用

谢谢

[编辑] 解决方案

嗨, 我终于知道发生了什么事! 我有50张图片要在资产文件夹中编译。 即使我在长时间睡眠后的第一个请求中预编译了它们,Rails也会花很多时间再次预编译它们

1-我在amason S3上移动图像, 2-将图像标签更改为图像静态标签 3-创建一个为s3中的静态文件提供服务的图像\静态\标记帮助器 4-重新部署应用程序,现在一切正常


谢谢你的帮助

似乎是重复的。听起来你的应用程序是在第一次请求时启动的,这就是为什么需要这么长时间。日志也表明了这一点。是的,我认为简单的答案可能是你需要增加你的动态。@Puhlze:谢谢你的回答。服务器不会重新启动。我重新启动服务器以重现错误。如果我不这样做,服务器的响应将一直持续到第二天早上。我有一个标准价格计划。我知道有了这个计划,服务器就永远不会睡觉(就像爱好计划一样)。我更新了information@BrandonElder. 谢谢你的补充。我已经有了一个标准计划,你给我建议哪一个?
Running rake assets:precompile on ⬢ myapplication... up, run.9829 (Standard-1X)
Yarn executable was not detected in the system.
Download Yarn at https://yarnpkg.com/en/docs/install
...
class ProjetsController < ApplicationController

  caches_action :new, :edit
<%= render 'form', projet: @projet, cached: true %>
Rails.application.configure do

    config.cache_classes = true