ruby-on-rails – 资源管道中的Rails静态html模板文件和开发模式下的缓存

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 资源管道中的Rails静态html模板文件和开发模式下的缓存前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用AngularJS和Rails构建一个网站.我用于模板的 HTML文件存储在/ app / assets / templates下,每次更新路由或更改模板内部嵌套的部分内容时,我需要“触摸”最高级别的文件/ app / assets / templates目录为我正在更改的html文件.

所以如果我有一个页面“edit.html”加载了一个部分“_form.html”,那么每当我更新一个路线或者改变_form.html中的某些东西,我需要确保edit.html被触摸.

这很烦人,很厉害.有没有办法通知资产管道/链轮,以避免缓存app / assets / templates目录?

解决方法

我发现的最好的解决方案是不要将资源管道用于HTML模板文件.

而是做一个名为TemplatesController的控制器,并且只创建一个操作.
然后将所有模板网址映射到使用以下路由的模板:

get /templates/:path.html => 'templates#page',:constraints => { :path => /.+/  }

然后将所有模板文件移动到app / views / templates中

然后在控制器内部,设置以下内容

caches_page :page

def page
  @path = params[:path]
  render :template => 'templates/' + @path,:layout => nil
end

这样,您的所有模板文件将从控制器提供,然后将缓存到公共/模板中.为了避免缓存问题,您可以在模板路径中创建一个时间戳记路径,以便您的缓存文件随版本一起提供:

get '/templates/:timestamp/:path.html' => 'templates#page',:constraints => { :path => /.+/ }

这样,您可以在每次上传网站时拥有新的时间戳,并且可以将模板文件夹存储在任何您喜欢的位置.您甚至可以在S3上存储模板文件夹,并具有该资源的URL.然后,无论您的模板文件被寻址,您都可以使用自定义资产方法

templateUrl : <%= custom_asset_template_url('some/file.html') %>

哪里:

def custom_asset_template_url(path)
  "http://custom-asset-server.website.com/templates/#{$some_global_timestamp}/#{path}"
end

然后只需将资产重定向到Rails服务器,如果没有找到它,并且它将被生成.或者所有模板文件可以在上传后预先生成.

猜你在找的Ruby相关文章