首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Ruby on Rails中启用压缩?

如何在Ruby on Rails中启用压缩?
EN

Stack Overflow用户
提问于 2014-08-30 05:20:41
回答 3查看 19.3K关注 0票数 24

我在这里发布了一个类似的问题。

Serving Compressed Assets in Heroku with Rack-Zippy

但我决定放弃这项服务,因为我不能让它工作。

我在我的网站上运行了PageSpeed Insights来确定我的网站的速度。

我收到的最重要的建议是启用压缩。

代码语言:javascript
复制
Compressing resources with gzip or deflate can reduce the number of bytes sent over the network.
Enable compression for the following resources to reduce their transfer size by 191.2KiB 
(74% reduction).

我已经按照这个网站上的说明操作了

https://developers.google.com/speed/docs/insights/EnableCompression

它说要参考你的web服务器的文档来了解如何启用压缩:

我已经用这个网站找到了我的web服务器

http://browserspy.dk/webserver.php

原来我的web服务器是WEBrick。

PageSpeed洞察页面仅列出以下3台服务器

代码语言:javascript
复制
Apache: Use mod_deflate
Nginx: Use ngx_http_gzip_module
IIS: Configure HTTP Compression

我搜索了有关WEBrick服务器的gzip压缩的文档,但什么也找不到。

我已经搜索了如何在Rails中启用压缩,但什么也找不到。这就是我在这里问你的原因。

我试过使用Rack Zippy,但是放弃了。

现在,我甚至不知道从哪里开始。我的第一步,是找出我应该做什么。

编辑

我遵循了Ahmed的建议,使用Rack::Deflator

我通过运行以下命令来确认我已经得到了它

代码语言:javascript
复制
rake middleware
=> use Rack::Deflator

然后

代码语言:javascript
复制
git add .
git commit -m '-'
git push heroku master

不幸的是,PageSpeed仍然说它需要压缩。我确认了这一点,进入开发人员工具<<网络设置并刷新页面。实际上,每个资源的大小和内容都是相同的,这意味着文件没有压缩。

我的某个文件有问题吗?

谢谢你的帮助。

下面是我的完整config/application.rb文件

代码语言:javascript
复制
require File.expand_path('../boot', __FILE__)

require 'rails/all'

Bundler.require(*Rails.groups)

module AppName
  class Application < Rails::Application

    config.middleware.use Rack::Deflater
    config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif)
    config.exceptions_app = self.routes

    config.cache_store = :memory_store

  end
end

如果有问题,来源很可能就在那里,对吧?

我需要安装平减宝石吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-30 05:33:44

启用压缩

将其添加到config/application.rb:

代码语言:javascript
复制
module YourApp
  class Application < Rails::Application
    config.middleware.use Rack::Deflater
  end
end

来源:http://robots.thoughtbot.com/content-compression-with-rack-deflater

票数 35
EN

Stack Overflow用户

发布于 2015-12-23 20:01:20

如果您使用insert_before (而不是" use "),将它放在中间件堆栈的顶部附近,而不是任何其他可能发送响应的中间件,那么Rack::Deflater应该可以工作。.use将其放在堆栈的底部。在我的机器上,最顶层的中间件是Rack::Sendfile。因此,我将使用:

代码语言:javascript
复制
config.middleware.insert_before(Rack::Sendfile, Rack::Deflater)

您可以通过从命令行执行rake middleware来按加载顺序获得中间件的列表。

注:A good link for insert_before vs Use in middleware rack

票数 18
EN

Stack Overflow用户

发布于 2020-09-07 19:03:48

根据Rack::Deflaterauthor,它应该放在Rails应用程序的ActionDispatch::Static之后。原因是,如果您的应用程序还在为静态资产提供服务(例如,在Heroku上),当资产从磁盘提供时,它们已经被压缩。在此之前插入它只会导致Rack::Deflater尝试重新压缩这些资产。因此,作为性能优化:

代码语言:javascript
复制
# application.rb

config.middleware.insert_after ActionDispatch::Static, Rack::Deflater
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25576440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档