我正在尝试了解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等)处理,以提高性能,这是正确的吗?
如果是这种情况,那么为什么要为开发中的这项任务创建一个专用的中间件呢?
感谢。
答案 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应用程序处理。