【问题标题】:Rails 4 assets manifest.json recent digestRails 4 资产 manifest.json 最近摘要
【发布时间】:2016-01-21 17:21:10
【问题描述】:

我在部署服务器上有一些带有摘要的清单文件

manifest-bcba79cf9483d404e9951992bbe38e46.json
manifest-7db402a1216c2425e0f881b6331ba27d.json
...

sprockets 如何知道哪些清单是最近的? 还是应该只有一个清单文件?

问候

【问题讨论】:

  • 我认为它会为此使用指纹,并且指纹也包含时间戳。所以它可以找出哪个是最新的

标签: ruby-on-rails manifest assets sprockets


【解决方案1】:

manifest.json 总是有一个随机的SecureRandom.hex(16) 附加到它的名字上。查看manifest,您可以看到 Sprockets 获取了第一个可用文件。

如果您在服务器上看到多个 manifest-*.json 文件,这可能会有风险,因为 Sprockets 并没有真正选择最新的文件,您最终可能会加载过时的资产。

只需运行以下命令即可:

bundle exec rake assets:clobber
bundle exec rake assets:precompile

【讨论】:

  • 我在 Sprockets::Asset 中没有看到任何代码来确定许多 manifest-.json 文件中的哪些文件由 rails 加载。它如何确定哪个是最新的。
  • @noodl 我添加了一步一步的解释。 Sprocket 并不是从文件池中提取最新的文件。它会计算您需要的资产摘要。
  • 对不起,如果我不清楚,但有多个清单文件。几个 json 文件,每个文件都包含清单信息,并且使用了错误的其中一个。清单中包含任何给定路径的当前文件的摘要,位于 assets: {} 部分。 manifest 不是像 javascript 文件或其他东西那样被链接到的文件。
  • github.com/sstephenson/sprockets/blob/master/lib/sprockets/… 建议如果有很多,它将按字母顺序排列第一个,这就是我们所看到的。那么要么应该只有一个清单文件,要么我们需要指定清单文件的恒定路径,这样它就不会只是猜测。
  • @noodl 你最后的评论让我很清楚。我刚刚添加了那部分,现在我看到你自己已经找到了:(
【解决方案2】:

我猜你应该只有一个清单文件。尝试通过增加 production.rb 文件中的资产版本来使整个缓存失效,如下所示:

config.assets.version = "1.x"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多