多少ruby代码处理公共服务中的静态内容?它完全通过rails应用程序吗?它是否使用Rack::Static?
答案 0 :(得分:18)
Rails不使用Rack::Static
,它有自己的版本ActionDispatch::Static
。如果您运行rake middleware
,则会看到它。
这只添加到Rails中间件堆栈if config.serve_static_assets
is true。此设置为defaults to true,但默认生成为config/environments/production.rb
turns if off。
我们的想法是,在开发过程中,您可以运行一个简单的单个流程,检查一切是否正常以及性能不是问题,但是当您部署到生产环境时,您需要将Web服务器(通常是Apache或Nginx)配置为提供静态文件,因为它比Ruby更好。
如果您使用Heroku,他们最新的Cedar堆栈不会为静态文件使用单独的Web服务器,因此作为deploy process的一部分,他们会注入Rails plugin to serve static assets。所有这个插件都将serve_static_assets
设置为true。
答案 1 :(得分:6)
这取决于。如果您使用phusion passenger之类的东西来运行您的应用程序,则其默认行为是直接使用Apache并跳过任何静态内容的rails。如果您正在使用webrick(rails服务器),它将使用更多的rails / rack代码来执行静态服务。
但是请注意,如果你在乘客身上使用apache / nginx:在生产模式下,由于默认是让apache提供所有静态内容,你需要在启动之前在应用程序上运行rake assets:precompile
它在apache中,或静态内容不会被放到需要apache快速获取它的地方,并且以prod-ready形式。