0

「 http://example.com/sites/example.com」 のようなルートがありますget "/sites/:domainname", :to => 'controller#action', :constraints => { :domainname => /.*/ }

キャッシュされたページ public/sites/example.com が (public/sites/example.com.html ではなく) 生成されるまで機能し、その時点でユーザーに .com ファイルを保存するように求めます。キャッシュされたページを public/sites/example.com.html などとして保存するにはどうすればよいですか? または、別の回避策がある可能性があります。

4

2 に答える 2

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
于 2013-04-12T15:41:12.183 に答える
0

現在の回避策は、ルートで html 拡張子を強制することです。

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

これによりpublic/sites/example.com.html、キャッシュに保存されます。

于 2013-04-12T16:02:28.070 に答える