对Rails应用程序的第一个请求非常慢

Ste*_*fan 5 mongrel ruby-on-rails http

我的Rails应用程序的第一个请求(工作会话)总是滞后.切换到生产模式没有帮助.

我使用mongrel,其他请求以可接受的速度处理.

如何让它更快?

问候

Chr*_*ley 2

如果您在处理第一个请求时发布日志内容,那么也许我们可以找出导致速度如此慢的原因。例如,这是我在第一个用户访问该网站时的日志

Booting Mongrel (use 'script/server webrick' to force WEBrick)    
Rails 2.1.0 application starting on http://0.0.0.0:3000    
Debugger enabled    
Call with -d to detach    
Ctrl-C to shutdown server
** Starting Mongrel listening at 0.0.0.0:3000
** Starting Rails with development environment...
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/mime_type.rb:66: warning: already initialized constant CSV
** Rails loaded.
** Loading any Rails specific GemPlugins
** Signals ready.  TERM => stop.  USR2 => restart.  INT => stop (no restart).
** Rails signals registered.  HUP => reload (without restart).  It might not work well.
** Mongrel 1.1.5 available at 0.0.0.0:3000
** Use CTRL-C to stop.


Processing SessionsController#new (for 127.0.0.1 at 2009-05-26 12:26:00) [GET]
  Session ID: de2acf074759026e1ed6205724f547a9
  Parameters: {"action"=>"new", "controller"=>"sessions"}
Rendering sessions/new
Completed in 0.00587 (170 reqs/sec) | Rendering: 0.00298 (50%) | DB: 0.00092 (15%) | 200 OK [http://localhost/]
Run Code Online (Sandbox Code Playgroud)

我认为 170 个请求/秒对于我们的应用程序来说很好,但其他人可能会发现这很慢。您可以从统计数据中看到,rails 提供的一半所需时间用于渲染响应 - 在本例中为登录屏幕生成 HTML。如果此请求需要很长时间,我的第一个调用端口将是与登录屏幕关联的视图和帮助程序。

如果您确实有一个系统在第一个请求时需要很长时间来初始化自身,那么为什么不偷偷摸摸地编写自己的启动程序,首先运行rails,然后通过curl发送一个假请求。这样您的用户就永远不会发现问题。

克里斯