rails 4启用了rails来提供静态资产:它是否正确?(在heroku上)

Mik*_*ike 29 ruby-on-rails heroku ruby-on-rails-4

环境:heroku

Rails:4

Ruby:2

我们向heroku部署了一个应用程序,似乎公共文件夹中的任何内容都无法访问(没有看到静态文件,所以路由器启动然后抱怨没有路由匹配).

为了解决这个问题,我们设定了

# Rails 4 only flag
config.serve_static_assets = true
Run Code Online (Sandbox Code Playgroud)

在我们的production.rb文件中.这真的是处理这个问题的最好方法吗?或者我们是否未能将应用程序配置为如何在heroku上正确托管?

Kar*_*ren 18

这在Rails 4.2中已弃用,现在它是一个在Rails 5.0中被删除的别名

config.serve_static_assets = true
Run Code Online (Sandbox Code Playgroud)

它应该改为:

config.serve_static_files = true
Run Code Online (Sandbox Code Playgroud)

  • 在Rails 5.1中:````config.serve_static_files`已弃用,将在Rails 5.1中删除.请使用`config.public_file_server.enabled``` (6认同)

Tom*_*Leu 14

在之前的Rails版本中,Heroku注入了一个插件,可以提供静态资产,因此这个问题不存在.由于这个插件系统在Rails 4中被移除,他们现在创建了一个同样的宝石.您可以通过以下方式在Gemfile中启用它:

gem 'rails_12factor', group: :production
Run Code Online (Sandbox Code Playgroud)

请参阅Heroku上的Rails 4.x入门

您当然也可以为您的资产使用CDN,但您不需要.


Pie*_*ois 10

正如Dean Winchester所提到的那样,将CDN用于静态资产是一个好主意.事实上,当仅使用Heroku时,您的Rails应用程序必须负责提供静态资产,因为Heroku Cedar架构不会为您执行此操作.

config.serve_static_assets = true如果您不想配置CDN并仅使用Heroku,则可以设置设置.

  • NB.如果您的Heroku应用程序是CDN的来源(例如,使用CloudFront,如下所述:https://devcenter.heroku.com/articles/using-amazon-cloudfront-cdn-with-rails),您可能仍需要`config.serve_static_assets = true`因此原点可以提供缓存未命中. (4认同)
  • `config.serve_static_assets = true`做什么?我甚至不从文档中理解它. (2认同)