Как получить Gzip и Expires Header в приложении Rails 3.1.1 на Heroku Cedar? - PullRequest
23 голосов
/ 17 октября 2011

Я использую Rails 3.1.1 приложение на Heroku Cedar .По умолчанию этот стек не Gzip и не устанавливает Истекает заголовки для активов .Есть кое-что об этом, но не очень понятно: http://devcenter.heroku.com/articles/http-routing

Может кто-нибудь дать мне кусок кода, чтобы активировать это?

Большое спасибо

Ответы [ 3 ]

38 голосов
/ 17 октября 2011

Cedar не использует Nginx, поэтому вы должны сами сжать ресурсы с помощью Rack :: Deflater, например:

# config.ru
require ::File.expand_path('../config/environment',  __FILE__)
use Rack::Deflater
run YourApp::Application

Также вы можете установить заголовки для статических файлов прямо в вашем приложении:

# config/environments/production.rb
config.static_cache_control = "public, max-age=3600"

Наконец, вам, вероятно, лучше настроить Rack :: Cache вместо кэширования Varnish.См. этот пост для получения дополнительной информации.

9 голосов
/ 16 января 2013

Бесстыдный плагин - я создал драгоценный камень, который включает сжатие, но избегает сжатия изображений.

https://github.com/romanbsd/heroku-deflater

5 голосов
/ 25 октября 2012

Важно, чтобы промежуточное программное обеспечение было включено раньше, до ActionDispatch::Static

#production.rb
config.middleware.insert_before ActionDispatch::Static, Rack::Deflater

> rake middleware
use Rack::Deflater
use ActionDispatch::Static
use Rack::Lock
use #<ActiveSupport::Cache::Strategy::LocalCache::Middleware:0x007f8e18455e90>
use Rack::Runtime
use Rack::MethodOverride
use ActionDispatch::RequestId
use Rails::Rack::Logger
use ActionDispatch::ShowExceptions
use ActionDispatch::DebugExceptions
use ActionDispatch::RemoteIp
use ActionDispatch::Reloader
use ActionDispatch::Callbacks
use ActionDispatch::Cookies
use ActionDispatch::Session::CookieStore
use ActionDispatch::Flash
use ActionDispatch::ParamsParser
use Remotipart::Middleware
use ActionDispatch::Head
use Rack::ConditionalGet
use Rack::ETag
use ActionDispatch::BestStandardsSupport
use Warden::Manager
use Rack::Mongoid::Middleware::IdentityMap
use Rack::Pjax
run MyApp::Application.routes
...