我有一个Rails 4.2.4(Ruby 2.2.2)应用程序,我通过Cloudfront提供静态资产。
如果Cloudfront正在提供您不想要的东西,则有两种可能性:
然而,当我改变
时Rails.application.config.assets.version ='1.0'
到
Rails.application.config.assets.version ='2.0'
(在config / initializers / assets.rb中)
和
删除公共/资产中的所有资产
运行“RAILS_ENV = staging bundle exec rake assets:precompile”
生成相同的文件名!
我发现使application.scss的消化文件无效的唯一方法是添加一些虚拟内容以激发新的md5校验和。
我做错了什么?
新的assets.version不应该更改消化的文件名吗?
最诚挚的问候和感谢!
答案 0 :(得分:9)
根据the comments in the Rails pull request I opened,这是一个需要修复的回归:https://github.com/rails/sprockets-rails/issues/240
更新:正如sansarp提到的那样,github问题中列出的解决方法之一就是使用旧版本的链轮:
gem 'sprockets', '< 3.0.0'
另一种解决方法是将资产路径用作缓存断路器:
# config/initializers/assets.rb
Rails.application.config.assets.prefix = "/assets/v1"
答案 1 :(得分:2)
使用以前版本的sprockets可以帮助您按预期获取文件名。 gem 'sprockets', '< 3.0.0'
https://github.com/rails/sprockets
答案 2 :(得分:0)
如果您使用capistrano进行部署,请务必在assets_prefix
文件中设置deploy.rb
。
set :assets_prefix, "assets/v1"