我使用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
注意到终端窗口中的这种奇怪现象......从第一个资产的起始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)
我已将问题追溯到WEBrick。我安装并使用了瘦,而且我的呼叫速度非常快。如果WEBrick问题是一个更大问题的症状,那么追踪问题可能仍然是好的。
答案 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,一切都很好。
还有一件事要检查:从命令行使用curl
或wget
来分别从资产本身请求页面。
哦,你使用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。
答案 6 :(得分:0)
WEBrick默认在连接IP时进行反向DNS查找。换句话说,它试图查看您的IP地址是否与域名相关联。这是不必要的,耗时太长,所以你可以禁用它。
打开文件" l / ruby / lib / ruby / 1.9.1 / webrick / config.rb"并使用":DoNotReverseLookup =>找到该行。零&#34 ;. 将nil更改为true。
享受!