Rails 4资产 - 生产环境 - 预编译 - CDN - Opsworks

时间:2014-12-20 20:02:19

标签: ruby-on-rails cdn production precompile

我正在尝试使用RAILS_ENV=production运行Rails 4应用程序。 我的目标是预编译资产并使用CDN快速提供服务。

到目前为止我做了什么

production.rb 
  config.serve_static_assets = false
  config.action_controller.asset_host = "http://mycdn.cloudfront.net"
  config.assets.js_compressor = :uglifier
  config.assets.compile = false

在opsworks部署期间正确运行的预编译步骤

"/usr/local/bin/bundle exec rake assets:precompile"

从预编译输出

/srv/www/myapp/current/public/assets/$ ls
application-<digest>.css
application-<digest>.js
... other images, etc...

在/application.html.slim中使用.js和.css的rails帮助程序标记

= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true
= javascript_include_tag 'application', 'data-turbolinks-track' => true
= favicon_link_tag 'favicon.png'

我期待什么

在页面加载时,我会看到类似的内容(在网址中预期的摘要):

<link data-turbolinks-track="true" href="http://mycdn.cloudfront.net/stylesheets/application-<digest>.css" media="all" rel="stylesheet" />

实际发生的事情

在页面加载时,我会看到类似的内容(在网址中没有DIGEST!):
坏消息是它们丢失了,因为application.css在我的应用程序中的任何地方都不存在,CDN无法自然地缓存它。

<link data-turbolinks-track="true" href="http://mycdn.cloudfront.net/stylesheets/application.css" media="all" rel="stylesheet" />

非常感谢任何帮助。

随机统计:
- Rails 4.1.5
- 独角兽4.8.1
- Opswork堆栈作为我的部署目标
- Cloudfront作为我的CDN

1 个答案:

答案 0 :(得分:0)

您需要将它添加到您的production.rb文件(以及您想要摘要的任何其他环境)

   config.assets.digest = true