在Rails3中缓存文件系统上的.com文件

时间:2013-04-12 15:19:28

标签: ruby-on-rails

我有一条像“http://example.com/sites/example.com”这样的路线 get "/sites/:domainname", :to => 'controller#action', :constraints => { :domainname => /.*/ }

它一直有效,直到生成缓存页面public / sites / example.com(而不是public / sites / example.com.html),此时它会要求用户保存.com文件。如何将缓存页面保存为,例如公共/网站/ example.com.html?或者可能有不同的解决方法。

2 个答案:

答案 0 :(得分:0)

查看源代码,caches_page自动假定缓存文件的扩展名应该是路径包含句点(.)时找到的“扩展名”。这个逻辑实际上是另一种方法,page_cache_file

      def page_cache_file(path, extension)
        name = (path.empty? || path == "/") ? "/index" : URI.parser.unescape(path.chomp('/'))
        unless (name.split('/').last || name).include? '.'
          name << (extension || self.page_cache_extension)
        end
        return name
      end

如果需要,您可以覆盖此方法以在控制器中稍微不同地操作,或者使用默认的ActionController :: Base实现。这是一个可能的例子:

  class MyController < ApplicationController
    class << self
      private

      # override the ActionController method
      def page_cache_file(path, extension)
        # use the default logic unless this is a /sites/:domainname request
        # (may need to tweak the regex)
        super unless path =~ %r{/sites/.*}

        # otherwise customize logic to always include the extension
        name = (path.empty? || path == "/") ? "/index" : URI.parser.unescape(path.chomp('/'))
        name << (extension || self.page_cache_extension)
        return name
      end
    end
  end

答案 1 :(得分:0)

目前的解决方法是在路由中强制使用html扩展名:

get "/sites/:domainname.html", :to => "sites#show", :as => :site, :constraints => { :domainname => /.*/ }

这会导致public/sites/example.com.html保存在缓存中。