2017-06-10 37 views
0

由于某些原因,当我使用Puma服务器从Heroku提供它们时,我的Rails资产将无法获得缓存控制标头。Rails资产在Heroku上没有Puma缓存控制标头

我在production.rbconfig.public_file_server.headers = { 'Cache-Control' => 'public, max-age=172800' }集,当我在我的本地机器上运行的应用程序,这工作得很好:

Cache-Control: public, max-age=31536000 
Etag: "fdffdae515ab907046e7deed6a567968ab3e689f8505a281988bf6892003ff92" 
X-Request-Id: 065e704c-1bea-428c-9c40-3cd6b6e4330a 
X-Runtime: 0.002411 

然而,当我部署到Heroku上,我得到以下标题:

Server: Cowboy 
Date: Sat, 10 Jun 2017 18:56:26 GMT 
Content-Length: 0 
Connection: keep-alive 
strict-transport-security: max-age=15552000; includeSubDomains 
Via: 1.1 vegur 

这似乎有点奇怪,令人惊讶的足够。我真的很想知道为什么会发生这种情况。我使用的是彪马web服务器,建议通过Heroku的自己 - 这是我Procfile:

web: bundle exec puma -C config/puma.rb 

这是我的puma.rb在配置:

# Puma can serve each request in a thread from an internal thread pool. 
# The `threads` method setting takes two numbers a minimum and maximum. 
# Any libraries that use thread pools should be configured to match 
# the maximum value specified for Puma. Default is set to 5 threads for minimum 
# and maximum, this matches the default thread size of Active Record. 
# 
threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }.to_i 
threads threads_count, threads_count 

# Specifies the `port` that Puma will listen on to receive requests, default is 3000. 
# 
port  ENV.fetch("PORT") { 3000 } 

# Specifies the `environment` that Puma will run in. 
# 
environment ENV.fetch("RAILS_ENV") { "development" } 

# Specifies the number of `workers` to boot in clustered mode. 
# Workers are forked webserver processes. If using threads and workers together 
# the concurrency of the application would be max `threads` * `workers`. 
# Workers do not work on JRuby or Windows (both of which do not support 
# processes). 

workers ENV.fetch("WEB_CONCURRENCY") {2} 

# Use the `preload_app!` method when specifying a `workers` number. 
# This directive tells Puma to first boot the application and load code 
# before forking the application. This takes advantage of Copy On Write 
# process behavior so workers use less memory. If you use this option 
# you need to make sure to reconnect any threads in the `on_worker_boot` 
# block. 

preload_app! 

# The code in the `on_worker_boot` will be called if you are using 
# clustered mode by specifying a number of `workers`. After each worker 
# process is booted this block will be run, if you are using `preload_app!` 
# option you will want to use this block to reconnect to any threads 
# or connections that may have been created at application boot, Ruby 
# cannot share connections between processes. 

on_worker_boot do 
    ActiveRecord::Base.establish_connection if defined?(ActiveRecord) 
end 

# Allow puma to be restarted by `rails restart` command. 
plugin :tmp_restart 

任何人有什么想法?顺便说一句,与this post相反,它不会影响服务文件的哪种文件类型 - 它们都不具有缓存控制集。

回答

0

发现问题!

事实证明,没有Heroku的告诉你,很明显,如果你想在资产管道使用缓存,您需要将rails_12factor宝石添加到您的Gemfile:

group :production do 
    gem 'rails_12factor' 
end 

只要我添加了rails_12factor宝石,事情开始正常工作:)