Ruby 轨道。第一个请求太慢,超时,下一个请求更快
我正在开发一个rails应用程序。在Heroku上毫无问题地推git后,应用程序在webbrowser中显示错误“请求超时” 如果我在1分钟后尝试,该应用程序会在webbrowser上快速显示页面 配置 请在下面找到我的配置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' 赫
- 轨道5.1.2
- psql(PostgreSQL)9.6.1
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
谢谢你的帮助似乎是重复的。听起来你的应用程序是在第一次请求时启动的,这就是为什么需要这么长时间。日志也表明了这一点。是的,我认为简单的答案可能是你需要增加你的动态。@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