从S3提供静态资产

时间:2011-12-16 16:22:02

标签: ruby-on-rails ruby-on-rails-3 heroku amazon-s3

我在Heroku的Cedar堆栈上运行Rails 3.0.9应用程序,并且有S3服务静态资产。在我的production.rb文件中,配置设置为:

config.serve_static_assets = false

如果我将其更改为true,它是否会更快地提供缓存内容,还是应该保留原样?

2 个答案:

答案 0 :(得分:5)

Rafal的答案并不完全正确,因为它基本上归结为您选择在应用程序中运行的堆栈和Rails版本。

Bamboo 堆栈上使用Rails 3.0 时,会有一个Varnish缓存位于Heroku运行的Thin进程之前。这会缓存所有静态资产并返回它们而不会触及您的应用程序。

Cedar 堆栈上使用Rails 3.0 时,没有Varnish缓存。因此,无论它们是否是静态的,所有请求都将命中您的Rails进程。

Rails 3.1 应该在 Cedar Heroku将尝试运行rake assets:precompile作为slug编译过程的一部分。如果由于任何原因导致失败,它会在您的slug中注入一些代码,这意味着静态资产在运行时被编译和提供。

开发中心有一个Rails 3.1 文档,对此特别有用:http://devcenter.heroku.com/articles/cdn-asset-host-rails31

所以,如果你正在寻找正确的设置,请牢记这一点。但是,在执行此操作之前,请注意Heroku将在您进行部署时根据自己的需要更改此设置,因此在slug编译期间,您放入的任何设置都将被覆盖。因此,你在这里放什么并不重要。

(为了记录,He​​roku使用Nginx,你只是不倾向于看到它)

答案 1 :(得分:0)

来自rails指南:

config.serve_static_assets配置Rails本身以提供静态资产。默认为true,但在生产环境中关闭,因为用于运行应用程序的服务器软件(例如Nginx或Apache)应该为静态资产提供服务。与默认设置不同,在运行时(绝对不推荐!)或使用WEBrick在生产模式下测试应用程序时将此设置为true。否则你将无法使用页面缓存,并且对公共目录下经常存在的文件的请求将无论如何都会打到你的Rails应用程序。

希望这有帮助。