Rails如何在公共场合提供静态内容?

时间:2012-03-30 15:43:00

标签: ruby-on-rails rack

多少ruby代码处理公共服务中的静态内容?它完全通过rails应用程序吗?它是否使用Rack::Static

2 个答案:

答案 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形式。