Rails asset_host,cloudfront和heroku

时间:2014-03-21 23:35:20

标签: ruby-on-rails heroku assets amazon-cloudfront

我在heroku上运行了一个rails 4.0应用程序,但就我而言,我无法使用我在asset_host中设置的主机来获取我的资产网址。

我相信我的云端设置很好,因为我可以在我的cloudfront网址中替换我的任何资产网址,并且该文件是从heroku接收并缓存在云端的。

因此https://xxxxxxxxxxxx.cloudfront.net/assets/application-xxxxxxxx.js正确缓存https://myapp.com/assets/application-xxxxxxxxx.js

问题似乎是我的资产助手,例如javascript_include_tag,永远不会在staging.rb中使用asset_host设置。

我加载页面时的所有内容都是https://myapp.com/assets/提供的所有js和css文件

我的分段设置如下所示:

  # Full error reports are disabled and caching is turned on
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true

  # Disable Rails's static asset server (Apache or nginx will already do this)
  config.serve_static_assets = true

  # Compress JavaScripts and CSS
  config.assets.compress = true

  # Don't fallback to assets pipeline if a precompiled asset is missed
  config.assets.compile = true

  # Generate digests for assets URLs
  config.assets.digest = true
  #config.assets.digest = false

  #config.assets.initialize_on_precompile = true

  config.static_cache_control = "public, max-age=31536000"

  # user Amazon Cloudfront for asset hosting
  config.action_controller.asset_host = "https://xxxxxxxxxxxx.cloudfront.net"

是否存在一些神奇的配置设置组合,以某种方式让我无法理解?

1 个答案:

答案 0 :(得分:2)

好的,终于弄清楚发生了什么 - 我的应用程序正在使用rails_api gem,它从标准的rails堆栈中删除了一大堆中间件。

将我的应用程序控制器更改为类ApplicationController< ActionController :: Base添加回所需的中间件,并且asset_host立即开始工作。我将进一步调查以确定它稍后是哪个中间件,并决定是否要返回rails_api。

我发现的另一个问题是,rack-mini-profiler重写缓存标头总是重新验证,从而否定了cdn的大部分好处。我现在已经在暂存和生产中禁用了它,我的应用程序运行得非常快!