2012-03-07 91 views
2

我正在爲客戶端提供一段代碼,以將其粘貼到其引用我的application.js文件的靜態html中。Rails Asset Pipeline:當請求非摘要時返回摘要版本

由於這位於我無法控制的頁面上,而且我不想讓客戶端每次推送發佈時更新其片段,所以我想知道是否有方法可以返回我的摘要-application.js版本,當請求正常的版本以確保瀏覽器獲得最新版本時?

我可以在腳本src上設置緩存清除時間戳,但不確定這是否真的可靠。

有關處理此問題的最佳方法的任何想法?

回答

0

我認爲必須優雅的方式是做一些控制器來做一些重定向302資產。

你可以粘貼到您的客戶端代碼鏈接/public-assets/my_assets

在您的路線創建路線:

match '/public-assets/:asset_name' => 'PublicAsset#index' 

並創建控制器PublicAssetController

class PublicAssetContoller < ApplicationController::Base 

    def index 
    redirect_to asset_path(params[:asset_name]) 
    end 

end 
+0

嘗試你的方式,但得到永遠的樂趣:「Sprockets :: Helpers :: RailsHelper :: AssetPaths :: AssetNotPrecompiledError」即使它是 – 2012-03-07 18:02:14

1

我們正在做類似的東西我們的「公共」JavaScript,它被集成到第三方網絡應用程序中。

我們這樣做的方式是在Capistrano部署期間在資產服務器上創建一個符號鏈接,指向文件的非摘要名稱。因爲它們只是我們的網絡服務器上的文件,其餘的都是apache。

+0

哦,男孩我覺得沒有想到讓apache處理它有點檻:s是你的cap任務解析manifest.yml以獲取摘要文件以鏈接到? – 2012-03-07 16:52:06

+0

我不記得確切,但我認爲我們放棄了這種方法,因爲manifest.yml沒有包含完整路徑。我們只是在尋找文件的修改時間。 – phoet 2012-03-07 17:14:55