2012-03-07 48 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