簡體   English   中英

Rails:如何處理不同版本的鏈輪中的不同哈希?

[英]Rails: How can I handle different hashes in different versions of Sprockets?

我正在將Rails 3應用程序升級到Rails4。我們有幾台服務器和一個大型代碼庫,因此我將一小部分流量發送到Rails 4服務器以測試其是否正常工作。

我遇到的一個問題是,在編譯資產時,Rails 4版本會生成與Rails 3應用程序不同的資產哈希。 新的哈希是twitter-df693e1c56dc88f61e60a2ad023eb024.js和舊應用上的twitter-7899bccf144efec6f5064e6b54b42be9.js

發生這種情況時,來自Rails 4服務器的資產鏈接會引用Rails 3服務器上不存在的文件,反之亦然(CDN緩存會加劇此問題)。

是否可以使哈希值保持一致? 據我所知,兩個應用都應使用MD5作為摘要:

Rails 4應用程序:

config.assets.configure do |env|
  puts "Digest class = #{env.digest_class}" # Digest class = Digest::MD5
end

不確定如何在Rails 3應用程序上檢查摘要類,但我認為對於該版本的Sprockets,它默認為MD5。

相關版本信息:

Rails 4應用程序:

sprockets (2.11.3)
sprockets-rails (2.0.1)
rails (4.0.5)

Rails 3應用程序:

sprockets (2.2.3)
turbo-sprockets-rails3 (0.3.14)
rails (3.2.19)

紅寶石:2.1.2

Sprockets生成的哈希值部分基於其自身的版本:

# Returns a `Digest` instance for the `Environment`.
#
# ...
#
# The value also provides a seed digest for all `Asset`
# digests. Any change in the environment digest will affect all of
# its assets.
def digest
  # Compute the initial digest using the implementation class. The
  # Sprockets release version and custom environment version are
  # mixed in. So any new releases will affect all your assets.
  @digest ||= digest_class.new.update(VERSION).update(version.to_s)

  # Returned a dupped copy so the caller can safely mutate it with `.update`
  @digest.dup
end

因此,我認為不可能在各個版本之間獲得一致的哈希值。

出於好奇,我確實嘗試覆蓋了Sprockets版本常量( Sprockets::VERSION = '2.2.3' ),但沒有獲得與舊版本當前應用程序相同的哈希值,因此我認為還必須采取其他措施生成哈希。

我目前的計划是在生產中運行2個版本的Sprockets時關閉CDN和資產摘要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM