web-dev-qa-db-ja.com

Ruby on Rails)で圧縮を有効にする方法は?

ここに同様の質問を投稿しました

Herokuで圧縮されたアセットをラックジッピーで提供

しかし、私はそれを機能させることができなかったので、そのサービスをあきらめることにしました。

WebサイトでPageSpeed Insightsを実行して、Webサイトの速度を確認しました。

私が受け取った最も重要な提案は、圧縮を有効にすることでした。

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サーバーのドキュメントを参照してください。

このウェブサイトを使用して自分のウェブサーバーを見つけました

http://browserspy.dk/webserver.php

私のWebサーバーはWEBrickであることがわかりました。

PageSpeed Insightsページには、次の3つのサーバーのみが表示されます

Apache: Use mod_deflate
Nginx: Use ngx_http_gzip_module
IIS: Configure HTTP Compression

WEBrickサーバーのgzip圧縮に関するドキュメントを検索しましたが、何も見つかりませんでした。

Rails=で圧縮を有効にする方法を検索しましたが、何も見つかりませんでした。そのため、ここで質問します。

Rack Zippyを使ってみましたが、諦めました。

今のところ、どこから始めればいいのかもわかりません。私の最初のステップは、私が何をすべきかを見つけることです。

編集

Rack :: Deflatorを使用するというアーメドの提案に従いました

走って確認した

rake middleware
=> use Rack::Deflator

その後

git add .
git commit -m '-'
git Push heroku master

残念ながら、PageSpeedはまだ圧縮する必要があると言っています。 Developer Tools << Network Settingsに移動してページを更新することで確認しました。すべてのリソースのサイズと内容はほぼ同じで、ファイルは圧縮されていません。

私のファイルの1つに何か問題がありますか?

ご協力ありがとうございました。

これが私の完全なconfig/application.rbファイルです

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

問題があれば、そこにソースがあると思いますよね?

Deflator gemをインストールする必要がありますか?

20
Darkmouse

圧縮を有効にする

Config/application.rbに追加してください:

module YourApp
  class Application < Rails::Application
    config.middleware.use Rack::Deflater
  end
end

ソース: http://robots.thoughtbot.com/content-compression-with-rack-deflater

32
Ahmed

Rack::Deflaterinsert_beforeを使用する場合( "use"ではなく)、ミドルウェアスタックの最上部近くに配置して、応答を送信する可能性のある他のミドルウェアの前に配置する必要があります。 .useはスタックの一番下に配置します。私のマシンで一番上のミドルウェアはRack::Sendfileです。だから私は使うでしょう:

config.middleware.insert_before(Rack::Sendfile, Rack::Deflater)

コマンドラインからrake middlewareを実行すると、ロード順にミドルウェアのリストを取得できます。

注: insert_before vsミドルウェアラックでの使用に適したリンク

16
NateQ