gpt4 book ai didi

ruby-on-rails - Actionpack 页面缓存呈现每个请求的 View

转载 作者:行者123 更新时间:2023-12-04 02:48:33 24 4
gpt4 key购买 nike

我尝试对我的静态页面使用Actionpack 页面缓存。如果我理解工作“Actionpack 页面缓存”是第一个到达 rails 的请求。渲染 View ,并将 Html 存储在缓存 public/deploy/...

第二个类似的请求没有到达 rails 。不会呈现 View 。将从缓存中获取一个页面。

但在日志中它看起来完全不同。

“第一个请求”

    I, [2013-08-16T12:24:43.591000 #16835]  INFO -- :   Rendered init/scene.html.erb within layouts/application (4.0ms)
I, [2013-08-16T12:24:43.615000 #16835] INFO -- : Rendered layouts/_server_params.html.erb (4.0ms)
I, [2013-08-16T12:24:43.624000 #16835] INFO -- : Rendered windows/_login_without_social_window.html.erb (2.0ms)
I, [2013-08-16T12:24:43.661000 #16835] INFO -- : Rendered windows/_choice_base_career_window.html.erb (34.0ms)
I, [2013-08-16T12:24:43.687000 #16835] INFO -- : Rendered windows/_auth_window.html.erb (21.0ms)
I, [2013-08-16T12:24:43.691000 #16835] INFO -- : Rendered windows/_free_teams_window.erb (2.0ms)
I, [2013-08-16T12:24:43.692000 #16835] INFO -- : Rendered layouts/_windows.html.erb (74.0ms)
I, [2013-08-16T12:24:43.775000 #16835] INFO -- : Rendered layouts/_bottom_menu.html.erb (80.0ms)
I, [2013-08-16T12:24:43.780000 #16835] INFO -- : Write page /home/pri/test/public/deploy/init/load_app.html (1.0ms)
I, [2013-08-16T12:24:43.782000 #16835] INFO -- : Completed 200 OK in 208ms (Views: 200.0ms | ActiveRecord: 0.0ms)
I, [2013-08-16T12:24:49.070000 #16835] INFO -- : Started GET "/init/load_app" for 127.0.0.1 at 2013-08-16 12:24:49 +0400
I, [2013-08-16T12:24:49.088000 #16835] INFO -- : Processing by InitController#load_app as HTML

“第二个请求”

    I, [2013-08-16T12:24:49.096000 #16835]  INFO -- :   Rendered init/scene.html.erb within layouts/application (1.0ms)
I, [2013-08-16T12:24:49.108000 #16835] INFO -- : Rendered layouts/_server_params.html.erb (2.0ms)
I, [2013-08-16T12:24:49.112000 #16835] INFO -- : Rendered windows/_login_without_social_window.html.erb (1.0ms)
I, [2013-08-16T12:24:49.124000 #16835] INFO -- : Rendered windows/_choice_base_career_window.html.erb (10.0ms)
I, [2013-08-16T12:24:49.138000 #16835] INFO -- : Rendered windows/_auth_window.html.erb (11.0ms)
I, [2013-08-16T12:24:49.140000 #16835] INFO -- : Rendered windows/_free_teams_window.erb (1.0ms)
I, [2013-08-16T12:24:49.142000 #16835] INFO -- : Rendered layouts/_windows.html.erb (31.0ms)
I, [2013-08-16T12:24:49.161000 #16835] INFO -- : Rendered layouts/_bottom_menu.html.erb (16.0ms)
I, [2013-08-16T12:24:49.165000 #16835] INFO -- : Write page /home/pri/test/public/deploy/init/load_app.html (3.0ms)
I, [2013-08-16T12:24:49.167000 #16835] INFO -- : Completed 200 OK in 76ms (Views: 70.0ms | ActiveRecord: 0.0ms)

在所有请求中, View 将被渲染并覆盖缓存页面。

我使用: rails 4.0.0

朱比

美洲狮服务器

生产模式

启动服务器 - RAILS_ENV=production rails s puma

我的production.rb

    ResFm::Application.configure do

config.cache_classes = true
config.eager_load = true
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
config.cache_store = :dalli_store

config.assets.js_compressor = :uglifier
config.assets.css_compressor = :sass

config.assets.compile = false
config.assets.digest = true
config.assets.version = '1.0'
config.assets.debug = false

config.log_level = :info
config.i18n.fallbacks = true
config.active_support.deprecation = :notify
config.log_formatter = ::Logger::Formatter.new

# cache static pages
config.action_controller.page_cache_directory = "#{Rails.root.to_s}/public/deploy"
config.serve_static_assets = true

#CDN google servers
config.asset_host = 'http://resassets.appspot.com'
end

在我使用的 Controller 中

caches_page :load_app
def load_app

end

这是一个根 url。

我的 gem 文件

    gem 'rails', '4.0.0'
gem 'activerecord-jdbcpostgresql-adapter', '~>1.3.0.beta2'
gem 'dalli'
gem 'jquery-ui-rails'
gem 'jquery-rails'

group :assets do
gem 'coffee-rails', '~> 4.0.0'
gem 'uglifier', '>= 1.3.0'
gem 'therubyrhino'
gem 'execjs'
end

group :development do
gem 'annotate'
gem 'puma'
end

gem 'dimensions-rails'
gem 'sass-rails', '~> 4.0.0'

group :production do
gem 'rack-cache'
gem 'actionpack-page_caching'
end

请帮助我理解我做错了什么。

最佳答案

当使用页面缓存时,您应该指示您的网络服务器为写入公共(public)目录的缓存页面提供服务。这个想法是,如果您的请求的正常路径是/foo/bar.html,那么缓存的副本应该存储在 Rails.root/public/foo/bar.html 中。这样请求就永远不会到达您的 Rails 应用程序。

当像您所做的那样将存储路径更改为 public/deploy 时,您应该注意将您的网络服务器指向该目录以从那里提供文件。我认为 Puma 无法处理该问题,因此您应该在前端服务器(如 Apache 或 Nginx)中处理该问题。

话虽如此,页面缓存已从 Rails 4 中删除是有充分理由的,也许您应该查看 Russian Doll Caching因为它更加灵活且易于使用。

关于ruby-on-rails - Actionpack 页面缓存呈现每个请求的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18269816/

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