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

Joh*_*hir 14 rack ruby-on-rails

公共服务中提供静态内容的红宝石代码有多少?它完全通过rails应用程序吗?它是否使用Rack :: Static

mat*_*att 18

Rails不使用Rack::Static,它有自己的版本,ActionDispatch::Static.如果你跑,你应该看到它rake middleware.

如果config.serve_static_assets为true,则仅添加到Rails中间件堆栈.此设置默认为true,但config/environments/production.rb如果禁用则生成默认值.

我们的想法是,在开发期间,您可以运行一个简单的单个流程,并检查一切是否正常以及性能不是问题,但是当您部署到生产环境时,您需要配置Web服务器(通常是Apache或Nginx)来提供静态服务.文件,因为它比Ruby更好.

如果您使用Heroku,他们最新的Cedar堆栈不会为静态文件使用单独的Web服务器,因此作为部署过程的一部分,他们会注入一个Rails插件来提供静态资产.所有这个插件都设置serve_static_assets为true.


小智 6

这取决于.如果你使用像phusion乘客这样的东西来运行你的应用程序,它的默认行为是直接使用Apache并跳过任何静态内容的rails.如果您正在使用webrick(rails服务器),它将使用更多的rails/rack代码来执行静态服务.

但是请注意,如果你在乘客身上使用apache/nginx:在生产模式下,由于默认是让apache为所有静态内容提供服务,你需要rake assets:precompile在apache中启动它之前在应用程序上运行,或者静态内容没有得到它需要apache快速得到它,并以一个准备好的形式.