gpt4 book ai didi

ruby-on-rails - Rails 缓存 - XML 文件?

转载 作者:数据小太阳 更新时间:2023-10-29 07:49:08 25 4
gpt4 key购买 nike

我的 Rails 应用程序在虚拟机上运行。 VM 的性能对于静态页面来说很好。事实上,我正在使用 Apache 虚拟主机运行另一个站点,该站点仅提供静态 HTML 文件并且响应足够。但是,我动态生成 XML 文件的 Rails 应用程序响应非常缓慢。事实上,每个 XML 文件大约需要 10 秒左右。 Rails 生成的这些 XML 文件一天只更改一次。

配置要缓存的这些 XML 文件的最佳做法是什么?

编辑 1:

我应该提一下,这些 XML 文件不能通过浏览器查看。它们被“现场”中的移动应用程序查看。因此,很遗憾,发送“HTTP/1.0 304 未修改”将不起作用。

编辑 2:

如果重要的话,我正在使用 Phusion Passenger 来托管我的 Rails 应用。

最佳答案

如果您使用 Rails 的静态页面缓存并通过 Apache 提供服务,只需在 URL 上使用显式 XML 扩展即可。

如果您只提供 xml 而没有 html,您还可以编辑 apache conf 以在查找缓存文件时默认为 xml 而不是 html。

缓存过期对于编码和测试来说是一件相当无聊的事情,但是由于您很少重新生成文件,您可能只是使整个缓存过期。


以下是我在一个很少更新的小型 Rails 站点中如何处理缓存的精选文件和摘录:

在你要缓存的 Controller 中

class XmlThingController < ApplicationController
caches_page :index, :show, :other_actions

在修改数据的 Controller /操作中会导致 xml 发生更改:

class Admin::SomeCrudController < AppplicationController
cache_sweeper :stupid_master_sweeper, :only => [ :save, :destroy ]

在“config/environments/production.rb”中

config.action_controller.page_cache_directory = 
File.join(RAILS_ROOT, 'public', 'cache')

在您的 vhost apache conf 中的某处:

# 1.4. Handle caching

# 1.4.1. prevent direct cache access
RewriteRule ^/cache - [F,L]

# 1.4.2. for index
RewriteCond %{DOCUMENT_ROOT}/cache/index.html -f
RewriteRule ^/?$ /cache/index.html [L]

# 1.4.3. for explicitly specified extensions
RewriteCond %{DOCUMENT_ROOT}/cache%{REQUEST_URI} -f
RewriteRule ^(.*)$ /cache$1 [L]

# 1.4.4. with html extension implied
RewriteCond %{DOCUMENT_ROOT}/cache%{REQUEST_URI}.html -f
RewriteRule ^(.*)$ /cache$1.html [L]


# 1.5. Finally, proxy everything else to mongrel
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ balancer://your-website-proxy%{REQUEST_URI} [P,QSA,L]

每次触发时清除整个缓存的愚蠢清扫器:

class StupidMasterSweeper < ActiveRecord::Observer
observe Foo, Bar # All models that affect caching here

def after_save(record); end
def after_destroy(record); end

def filter(controller)
# sweep everything.
`cd #{RAILS_ROOT} && RAILS_ENV=#{ENV['RAILS_ENV']} rake cache:clear`
end
end

lib/tasks/cache.rake

namespace :cache do 

desc "Remove all cached files"
task :clear do
puts `rm -rf #{RAILS_ROOT}/public/cache/*`
end

end

如果您希望将默认隐含扩展名默认为 xml,请更改 1.4.2 索引规则中的扩展名,以及以下内容:

# 1.4.4. with html extension implied
RewriteCond %{DOCUMENT_ROOT}/cache%{REQUEST_URI}.html -f
RewriteRule ^(.*)$ /cache$1.html [L]

到:

# 1.4.4. with xml extension implied
RewriteCond %{DOCUMENT_ROOT}/cache%{REQUEST_URI}.xml -f
RewriteRule ^(.*)$ /cache$1.xml [L]

关于ruby-on-rails - Rails 缓存 - XML 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/706015/

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