gpt4 book ai didi

ruby-on-rails - Rails 页面缓存和自动扩展的问题

转载 作者:行者123 更新时间:2023-12-04 15:36:58 28 4
gpt4 key购买 nike

我有一个 JSONXML基于需要页面缓存的 API。我已经在 api 上设置了我的路由,以将格式包含在 URL 中,这样 URL 就像这样工作:

http://example.com/foo/1/bar/2/xml
http://example.com/foo/1/bar/2/json

我看到的问题是在服务器的 public 中文件夹,文件被保存为 xml.xmljson.json ,这会导致下次访问 URL 时缓存未命中。

有没有办法:
  • 关闭自动扩展生成,以便在没有扩展的情况下保存它们? (例如:RAILS_ROOT/public/foo/1/bar/2/json)
  • 强制所有扩展为 .html每次通话。 (例如:RAILS_ROOT/public/foo/1/bar/2/json.html)

  • 这些中的任何一个都会导致我的服务器返回缓存文件而不是未命中。我怎样才能做到这一点?

    编辑:
    有人问相关路线:
    scope '(foo/:foo_id)', :foo_id => /\d+/ do
    get '/bar/:bar_id/:format' => 'bars#show', :bar_id => /\d+/, :format => /json|xml|html/
    end

    解决方案 :
    当我正在寻找一种使用内置页面缓存支持来实现这一点的官方方法时,我最终只使用了一个后过滤器和我自己的页面缓存方法,正如 Anton 所建议的
    # application_controller.rb
    def cache_api_page
    if REDACTEDServer::Application.config.action_controller.perform_caching
    self.class.cache_page(response.body, request.path, '')
    puts "CACHED PATH: #{request.path}"
    end
    end

    # bar_controller.rb
    after_filter :cache_api_page, :only => [ :show, :index ]

    最佳答案

    你可以这样做:

    class FooController < ApplicationController

    after_filter(:only => :show, :if => Proc.new { |c| c.request.format.json? }) do |controller|
    controller.class.cache_page(controller.response.body, controller.request.path, '.html')
    end

    end

    http://example.com/foo/1/bar/2/json被访问,它会将页面写入缓存(RAILS_ROOT/public/foo/1/bar/2/json.html)

    如果您收到 http://example.com/foo/1/bar/2/json再次,您收到 RAILS_ROOT/public/foo/1/bar/2/json.html,但您的 http 服务器(Apache?)应该知道此文件的内容类型。

    否则内容类型将设置为“text/html”

    更新

    给你.htaccess
    <FilesMatch "\/json$">
    <IfModule mod_headers.c>
    Header set Content-Type "text/json"
    </IfModule>
    </FilesMatch>


    <FilesMatch "\/xml$">
    <IfModule mod_headers.c>
    Header set Content-Type "text/xml"
    </IfModule>
    </FilesMatch>

    关于ruby-on-rails - Rails 页面缓存和自动扩展的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5998457/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com