use*_*168 6 caching ruby-on-rails
有没有办法预先构建页面缓存而不通过http请求调用实际页面?
我有一个相对复杂的视图,并希望缓存整个事情.我想在应用程序中预先构建这个缓存版本,这样当用户实际点击它时,它就已经存在了.
谢谢
小智 0
我认为以下链接应该给您一个良好的开始。 如何在不访问网页的情况下获取控制器操作的渲染输出?
我尝试完成相同的任务,据我所知,您的虚假请求应该具有正确的主机,因为缓存密钥包含主机信息。
我通过使用 ActionController::Integration::Session 完成了缓存
ais = ActionController::Integration::Session.new
ais.host = host
ais.xml_http_request(:post, url, params, headers)
Run Code Online (Sandbox Code Playgroud)
我还有另外一个:
class FakeRequest
include ActionController::UrlWriter
def initialize(url, params, session, host)
@url = url
@params = params
@session = session
default_url_options[:host] = URI.parse(host).host
end
def post
process(:post)
end
def get
process(:get)
end
def xhr
process(:post, true)
end
def process(method, ajax = false)
uri = URI.parse(url_for(@url))
request = ActionController::TestRequest.new({'HTTP_HOST' => uri.host,'rack.input' => '','rack.url_scheme' => 'http'})
request.query_parameters = @params
request.path = uri.path
request.host = uri.host
request.env['REQUEST_METHOD'] = method.to_s.upcase
if ajax
request.headers['X-Requested-With'] = 'XMLHttpRequest'
end
@session.each_pair do |k,v|
request.session[k] = v
end
response = ActionController::TestResponse.new
controller = ActionController::Routing::Routes.recognize(request).new
return controller.process(request, response)
end
end
Run Code Online (Sandbox Code Playgroud)
这也将返回响应对象。
| 归档时间: |
|
| 查看次数: |
1965 次 |
| 最近记录: |