2010-12-16 48 views
2

我是Rails的新手,所以請......保持溫柔。 :)如何檢索Rails緩存清除時間戳?

顯然有一個緩存破壞時間戳,作爲查詢字符串附加到JavaScript和CSS包括在Rails中。我怎樣才能以編程方式獲得該值? (我希望能夠將其用於其他目的)。

回答

1

有多種方式來做到這一點。如果您使用Capistrano部署,您可以做的一件事是設置REVISION中包含的版本號的ENV['RAILS_ASSET_ID']

2

這是有問題的文件的最後修改時間戳。軌道計算它ActionViewasset_tag_helper.rb如下,但重要的部分是File.mtime(path).to_i

# Use the RAILS_ASSET_ID environment variable or the source's 
    # modification time as its cache-busting asset id. 
    def rails_asset_id(source) 
     if asset_id = ENV["RAILS_ASSET_ID"] 
     asset_id 
     else 
     if @@cache_asset_timestamps && (asset_id = @@asset_timestamps_cache[source]) 
      asset_id 
     else 
      path = File.join(ASSETS_DIR, source) 
      asset_id = File.exist?(path) ? File.mtime(path).to_i.to_s : '' 

      if @@cache_asset_timestamps 
      @@asset_timestamps_cache_guard.synchronize do 
       @@asset_timestamps_cache[source] = asset_id 
      end 
      end 

      asset_id 
     end 
     end 
    end 
+0

啊,好 - 我想我誤解了那個時間戳的含義,那麼;我在整個應用程序的印象之下,而不是它附加的文件。我真正想知道的是Rails應用程序的「最後開始」時間(或其他一些等效標識符),我想以某種方式通過編程方式使用它。 Rails是否提供這樣的設施?在半小時左右在網上挖掘,似乎沒有。 – 2010-12-16 18:49:42

+0

不,主要原因是「上次開始」不是嚴格定義的時間戳。如果您使用Passenger運行服務器,那麼Rails將啓動並停止實例以正確管理資源。如果你可以更具體地瞭解你需要什麼,那麼可能會有更好的解決方案 – Gareth 2010-12-16 18:54:58

+0

好的,當然。基本上,我有一個沉重的瀏覽器緩存的應用程序,需要知道何時部署了新版本。我寧願寫一個自動分配的版本ID(因此我不必記住將其分配給新鮮頁面中的DOM節點),然後讓JavaScript代碼檢查該值決定是否提示重新加載。似乎必須有一個標準的方法來做到這一點,但我真的不知道在哪裏看。非常感謝您的幫助! – 2010-12-16 19:03:29

0

正如我所發佈的,如果您隨Capistrano部署,因爲REVISION文件包含唯一的哈希ID,但您也可以創建自己的版本ID並將其分配給RAILS_ASSET_ID。