我正在尝试使用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
答案 0 :(得分:0)
您需要将它添加到您的production.rb文件(以及您想要摘要的任何其他环境)
config.assets.digest = true