Rails 4.2 Rails.application.config.assets.version不会使摘要资产文件名无效

时间:2015-09-13 10:36:11

标签: ruby-on-rails-4 version assets precompile

我有一个Rails 4.2.4(Ruby 2.2.2)应用程序,我通过Cloudfront提供静态资产。

如果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不应该更改消化的文件名吗?

最诚挚的问候和感谢!

3 个答案:

答案 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"