为什么WEBrick在OSX上处理我的请求这么慢?

时间:2012-03-11 05:34:37

标签: ruby-on-rails ruby-on-rails-3

我使用rails new demo在Rails 3.2.2中创建了一个基本的演示应用程序。然后,我添加了一个控制器,其中显示了一个显示视图的方法。刷新时,渲染页面平均需要20多秒。这显然使得它无法发展,所以我试图弄清楚为什么以及如何解决这个问题。

我应该提一下,我使用的是带有4GB内存和SSD驱动器的Macbook Air 2011,因此我认为我的硬件与此问题无关。

运行OSX Lion,Rails 3.2.2,& Ruby 1.9.3。通过WEBrick在本地运行

更新

我所做的更改是运行rails generator Say hello goodbye

然后我修改了hello.html.erb来说Hello World!

这是我的gemfile:

source 'https://rubygems.org'

gem 'rails', '3.2.2'

# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'

gem 'sqlite3'

# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'

  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'

输入rails server

启动服务器

更新2

注意到终端窗口中的这种奇怪现象......从第一个资产的起始GET到GET需要8秒。

Started GET "/say/hello" for 127.0.0.1 at 2012-03-10 22:49:12 -0700
Processing by SayController#hello as HTML
  Rendered say/hello.html.erb within layouts/application (0.1ms)
Completed 200 OK in 5ms (Views: 5.3ms | ActiveRecord: 0.0ms)


Started GET "/assets/application.css?body=1" for 127.0.0.1 at 2012-03-10 22:49:20 -0700
Served asset /application.css - 200 OK (0ms)

下一个资产再过4秒......

Started GET "/assets/say.css?body=1" for 127.0.0.1 at 2012-03-10 22:49:24 -0700
Served asset /say.css - 200 OK (0ms)

更新3.1

我已将问题追溯到WEBrick。我安装并使用了瘦,而且我的呼叫速度非常快。如果WEBrick问题是一个更大问题的症状,那么追踪问题可能仍然是好的。

7 个答案:

答案 0 :(得分:3)

不是真的答案,但可能有助于隔离问题:

尝试使用不同的服务器,例如“瘦”或“粉末”http://pow.cx/(顺便说一下:粉末完全是岩石!,并考虑安装powder宝石,它可以提供良好的指令 - 线工具。)Pow非常容易安装。

另外,使用Activity Monitor应用程序检查你的内存利用率 - 4GB听起来很多,但它可以很快用完。但我正在运行相同的环境而没有问题。

我不认为这是一个资产编译问题 - 使用一个干净利落的Rails应用程序,并没有进行大量的编译工作。但时间有点诅咒 - 可能会检查在等待期间哪个进程正在咀嚼CPU(或磁盘)。您可以通过在config.assets.enabled = false中设置application.rb来排除资产管道。

另一件需要检查的事情是:你是否接受了最新的红宝石1.9.3 - 我在1.9.3-p0上看到了奇怪的东西,我现在正在使用1.9.3-p125,一切都很好。

还有一件事要检查:从命令行使用curlwget来分别从资产本身请求页面。

哦,你使用Time Machine吗?我的机器在运行时有时会非常活跃。 不应该与SSD一样多,但......谁知道。

答案 1 :(得分:2)

资产预编译问题

+1

我会尽力回答你如何解决它(我遇到同样的问题,直到找到这个解决方案):

group :development do
    gem 'rails-dev-tweaks', '~> 0.5.1' #nice gem to speedup development process
end

它给了我很多帮助

使用passenger + nginx进行开发也是一个很好的方法(对我而言,它加速了对webrick大约30-40%的页面渲染)

希望它有所帮助

答案 2 :(得分:2)

我遇到了类似的问题,但我不确定该解决方案是否适用于您。我的问题基本上与不需要的反向查找有关。看看这个问题可能会有所帮助:Webrick is very slow to respond. How to speed it up?

答案 3 :(得分:1)

我认为每次都会进行某种资产编辑或复制。

我会尝试将资产编译更改为测试 -

在Rails 3.1中,默认情况下启用资产管道。通过将此行放在应用程序类定义中,可以在config / application.rb中禁用它: config.assets.enabled = false

如果您有任何大型(或大量)图片或其他媒体资产,我将非常感兴趣。

答案 4 :(得分:0)

使用瘦身是否同样缓慢?

在您的Gemfile中..

gem 'thin'

我开始使用thin来确保我匹配我的生产环境并发现它更快一点(但是,我从来没有看到任何像20秒那么慢的东西..)

答案 5 :(得分:0)

我遇到了同样的问题......任何人都找到了解决方案,所以我改用了Mongrel。

Here is the link with the instructions

答案 6 :(得分:0)

WEBrick默认在连接IP时进行反向DNS查找。换句话说,它试图查看您的IP地址是否与域名相关联。这是不必要的,耗时太长,所以你可以禁用它。

打开文件" l / ruby​​ / lib / ruby​​ / 1.9.1 / webrick / config.rb"并使用":DoNotReverseLookup =>找到该行。零&#34 ;. 将nil更改为true。

享受!