为什么在生产中从中间件堆栈中删除ActionDispatch :: Static?

时间:2015-12-15 10:42:04

标签: ruby-on-rails middleware

我正在尝试了解rails如何在 / public 下提供静态文件,如果我能正确理解,ActionDispatch::Static中间件对此负责。

但是,我注意到它只在开发环境中可用:

$ rake middleware

use Rack::Sendfile
use ActionDispatch::Static
use Rack::Lock
.
.

并在制作中:

$ RAILS_ENV=production rake middleware

use Rack::Sendfile
use Rack::Lock
.
.

如何在生产中提供静态文件?我的猜测是,这是由Web服务器本身(apache,puma等)处理,以提高性能,这是正确的吗?

如果是这种情况,那么为什么要为开发中的这项任务创建一个专用的中间件呢?

感谢。

1 个答案:

答案 0 :(得分:4)

这由config/environments/production.rb

中的设置控制
# Disable Rails's static asset server (Apache or nginx will already do this).
config.serve_static_files = false

在开发中未启用此功能的原因是因为在开发过程中您不需要nginx或apache的额外功能/开销。例如,您不希望浏览器在开发过程中获得缓存这些文件的说明。

ActionDispatch::Static只会从磁盘加载这些文件并将它们发送到浏览器,没什么特别的。对public的所有请求都将由ActionDispatch::Static处理,所有其他请求都由您的Rails应用程序处理。