开发环境下,资源的服务速度非常缓慢。

4
我有一个标准的Rails 3 Web应用程序,带有默认的Asset Pipeline。突然间,资源加载时间变得非常长(我的页面加载时间从约1-2秒变成了约1分钟)。服务器响应时间(/home)正常,但是一些.css和.js文件挂起了很长时间(高达45秒)。唯一需要这么长时间的少数资源是那些由gems提供的(例如:modernizr-rails/vendor/assets/javascripts/modernizr.js)。
例如,对于modernizr.js?body=1
Headers:
Request URL:http://dev.sharewizz.com:3000/assets/modernizr.js?body=1
Request Method:GET
Status Code:304 Not Modified

统计信息:

DNS Lookup  5.00 s
Connecting  20.07 s
Sending     0
Waiting     10 ms
Receiving   3 ms

这是sprockets的问题吗?我如何知道出了什么问题?

注:所有其他浏览器的行为都相同。 编辑:实际上问题只出现在Chrome中,甚至不是Safari。 我尝试使用rails s在端口3000和端口80上启动服务器(没有更改)

如果我访问http://localhost:3000/assets/modernizr.js?body=1,大多数情况下它会立即响应,有时候会等待很长时间。

3个回答

11

另一种选择 - 硬盘驱动器不够快以处理日志,我在我的开发电脑上突然遇到了这个问题。尝试将以下内容添加到 config/development.rb 文件中:

# Expands the lines which load the assets
config.assets.debug = false #true
如果您拥有很多资产,每个资产写入开发者日志的时间会逐渐累加,总共可能需要几分钟。

有一个名为“quiet-assets”的宝石可以解决这个问题。 - Cyril Duchon-Doris

3
在Chrome浏览器中存在一个问题,它会尝试进行DNS请求,并等待超时(如果您将鼠标悬停在彩色时间轴上,可以在开发人员工具/网络选项卡中看到,该选项卡显示"waiting (30000ms or higher)"、"receiving (4ms)")。
如果您在host文件中执行诸如127.0.0.1 localhost.mysite.com之类的操作,并在浏览器中访问http://localhost.mysite.com,则可以尝试使用端口80上的localhost进行访问:
  • 使用命令rvmsudo rails server -p 80启动Rails
  • 在Chrome中访问http://localhost
这样可能可以解决问题。

这个与编程有关的内容可能会对一些 OS X >= Lion 的用户有所帮助:http://superuser.com/questions/313128/lion-name-resolution-order - Sami Samhuri

0

在开发环境中预编译您的资产并启用资产管道。但是,这可能不会加载您在源代码中进行的更改,除非重新启动服务器。


运行 rake assets:precompile; 然后执行 rails server -e production。没有错误。但是我在应用程序-701b5....js和.css上得到了404未找到的错误。 执行 ls public/assets/application,我看到了application-701b5....js。完全相同的文件。 - Benjamin Crouzier
production.rb 中必须将 config.serve_static_assets 设置为 true。(参见 https://dev59.com/QGsz5IYBdhLWcg3wrJ0x)。生产模式下一切都很快。 - Benjamin Crouzier
如果我切换回开发环境,速度就会变慢(页面不仅需要额外几秒钟,而是几分钟)。无论如何,我想在开发环境中进行开发,所以我正在解决这个问题。 - Benjamin Crouzier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接