问题标签 [rack-cache]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
206 浏览

ruby-on-rails - 忽略 Rack::Cache 的 googlebot?

我正在使用Rack::Cache,谷歌搜索机器人触发了我所有的缓存未命中,所以我的缓存总是充满了实际上并不代表我网站上最受欢迎的页面,我似乎找不到如何忽略 IP 或用于缓存的用户代理,以前有人遇到过这个问题吗?

0 投票
1 回答
964 浏览

ruby - 在任何来源中都找不到 rack-cache-1.0.3

我创建了一个非常基本的 Rails 3.1 应用程序,部署到一个运行 Ruby 1.8.7 (P334) 的机器上(不幸的是,我不能轻易地转到 1.9.2)。

部署并运行“捆绑安装”后,我尝试运行控制台:

我得到:

在任何来源中都找不到 rack-cache-1.0.3

并且控制台没有出现。

似乎这个特定版本的 rack-cache 被 ActionPack 3.1.0 列为依赖项。

有人可以向我解释我需要做什么来解决这个问题,即让捆绑器将此版本的机架缓存附加到项目中吗?

我还读到捆绑器将特定于项目的 GEM 存储在“其他地方”,即不再位于全局 Ruby GEM 路径中。此项目特定位置是否有默认位置?

哦,我还不断收到 Rails 3.1 的大量“无效 gemspec”警告,即:

[/usr/local/lib/ruby/gems/1.8/specifications/rack-cache-1.0.3.gemspec] 中的无效 gemspec:规范中的无效日期格式:“2011-08-27 00:00:00.000000000Z”

0 投票
4 回答
6096 浏览

heroku - Heroku cedar 堆栈中 rack-cache 与 Varnish 的缺点?

之前的 2 个 Heroku 应用程序堆栈带有一个Varnish层,它会根据 http 标头自动反向代理缓存的内容。

新的 Heroku cedar 堆栈没有这个 Varnish 层。Heroku 建议改用rack-cachememcache

与以前的带有清漆层的堆栈相比,这是否有缺点?使用 rack-cache,服务缓存层的服务器不是更少,而且优化的方式也更少吗?

0 投票
2 回答
1682 浏览

ruby-on-rails - Rails/Dragonfly/Apache - Rack::Cache - 如何使用 X-Sendfile?

我正在使用Dragonfly为我的 Rails 应用程序提供处理后的图像。Dragonfly 依赖Rack::Cache来访问那些处理过的图像,这样Dragonfly 就不必一次又一次地处理这些图像,从而浪费 CPU 时间。

我的问题从这里开始:如果我是对的,通过 Rack::Cache 发送文件仍然占用 Rails 进程,那么查看 30 个图像的页面,即使这些图像的文件大小很小,也会很好地占用 Rails 进程迅速地。如果更多的访问者来查看该页面,那么他们将体验到非常缓慢的响应时间。如何通过 X-Sendfile 获取这些文件?

我在 中设置了以下内容production.rb,但我知道这些是针对 Rails 的资产,而不是 Dragonfly 文件:

我知道 Rack::Cache 以某种方式支持 X-Sendfile (可能通过Rack::Sendfile),因为它会产生一个响应#to_path. 但是,我不知道如何启用它。当我检查来自 Rack::Cache 的文件时,我没有看到任何 X-Sendfile 信息:

我知道,根据网络上的帖子,我应该看到如下内容:

最后我不知道我必须配置它的 Dragonfly 还是 Rack::Cache (或两者)。如何让 Dragonfly 和/或 Rack::Cache 通过 X-Sendfile 提供文件

关于我的设置的信息:

  • 导轨 3.1.1
  • 乘客 3.0.9
  • 中央操作系统
  • 据我所知,已安装 Sendfile 模块。我已经在我的虚拟主机配置XSendFile OnXSendFilePath /path/to/app指定了,并且 Apache 没有抱怨该指令XSendFile不存在。

谢谢!

更新 2011 年 11 月 6 日

基于这个旧的更新,只要Rack::Sendfile放在前面Rack::Cache,就会使用X-Sendfile。我做到了,这就是我的中间件的样子。但是,这些文件仍然没有 X-Sendfile 标签。同样,我不知道这是否是确定 X-Sendfile 是否启用的可靠方法,所以我检查了乘客队列。当我访问一个页面时,队列似乎受到了很大的阻碍。

2011 年 11 月 7 日更新

看来这纯粹是 Rack::Cache 和 Rails 3.1 的问题。虽然 Rack::Cache 支持通过 Rack::Sendfile 使用 X-Sendfile (就像我上面提到的,Rack::Cache,当使用Disk EntityStore时,to_path因为它返回的body 是 File 的子类,所以它响应了),Rails 3.1使用自己的存储解决方案。Rails 3.1 使用ActiveSupport::Cache::FileStore,如果您没有在production.rb文件中指定任何内容,则默认设置。

FileStore 的问题在于它返回的主体是要向上游发送的响应的一部分,因为该主体不响应to_path. 主体是ActiveSupport::Cache::Entry的一个实例。您可以在此处看到,当要求 FileStore 读取缓存文件时,它会通过File.open('/path/to/file') {|f| Marshal.load(f) }返回 Entry 实例来读取它。最终被上游传递并返回给客户端的值是Entry#value

我的问题

为了帮助我决定是否应该修补这个问题,或者让 Rails 使用 Rack::Cache 自己的磁盘存储,我有一些问题:

  1. Rails 3.1 没有使用 Rack::Cache 自己的存储解决方案的原因是什么?为什么 Rails 有自己的?
  2. 使用 Marshal 是否有原因?是否有理由应该发回数据字节流?

我比平时更深入,如果我理解正确,我会感到惊讶。我希望能找到答案!

0 投票
1 回答
1058 浏览

ruby-on-rails - Rails 3.1 和 Http 页面缓存

鉴于 Heroku Cedar 没有 Varnish 提供的 http 缓存,我想使用Rack::Cache. 有人告诉我,rails 3.1.1Rack::Cache默认情况下处于活动状态,我只需要确保在配置中具有:

我需要选择一个缓存存储,对于我正在使用的这个实验:

在我要缓存的页面的操作中,我添加了以下几行:

此代码用于 Varnish,第一个请求将返回 200,随后(5 分钟)将返回一个304.

Rails 3.1 和 Heroku Cedar Stack 不会发生这种情况。我确实在响应中获得了这些标头,但后续请求返回 200 而不是 304。

我究竟做错了什么?谢谢你。

0 投票
1 回答
680 浏览

ruby-on-rails - Rack::Cache 性能不佳

我将 Rack::Cache 设置为堆栈中最顶层(最后一个)的中间件。我的应用程序托管在 heroku cedar 上,因此 Rack::Cache 也负责静态资产。

它由 heroku memcached 产品支持,配置如下:

它运行得很薄。

我正在使用 ab 测试图像文件的性能。

ab -n100 -c10 https://example.com/foo.jpg

查看我的日志,所有请求都是缓存命中(“新鲜”)。但是性能很差,只有大约 6 个请求/秒。我知道 Rack::Cache 不会像专用的 http 代理那样执行,但我当然期望比这更高的吞吐量。

更新 我不知道我以前怎么没想到这一点,但我的基准确实是最大化我的互联网连接。如果我使用 robots.txt 而不是 jpg 进行相同的测试,我会得到 20 个请求/秒(并且仍然在下游最大)。

0 投票
1 回答
2129 浏览

ruby-on-rails - rails rack cache - 如何手动清除所有缓存

我通过 rack-cache 缓存了一个页面,现在浏览器从不显示更新的页面,因为它显示了缓存的版本。

如何清除所有缓存?(注意:我从 rails_app_root/public 目录中删除了所有缓存页面)。我什至尝试禁用 rack-cache 但它仍然显示页面的缓存版本。

有任何想法吗?

0 投票
1 回答
1618 浏览

ruby-on-rails - Heroku Cedar Stack - 机架缓存头文件

我这辈子都想不通。尝试使用 Rack::Cache 缓存我在 Heroku 上的一些静态公共页面,此外还进行动作缓存以防它通过反向代理。

例如,这是我的“home”操作中的代码:

出于所有意图和目的,这应该有一个最大年龄为 10 的公共缓存控制标签,不是吗?

我做错了什么可怕的事情吗?我觉得那个陈旧、无效的缓存响应有些问题……那是我第四次点击该页面。

配置信息:

(也许有一种方法可以手动设置缓存控制标头?似乎应该有一种更简单的方法)。

更新

我什至尝试将控制器操作降至最低:

而且它不起作用...

0 投票
1 回答
2632 浏览

ruby-on-rails - Rails 3.2 Rack::Cache HTTP 标头和动作缓存

下午好,

我在尝试将 HTTP 缓存与 Rack::Cache 和动作缓存(在我的 Heroku 托管应用程序上)结合起来时遇到了一些问题。

单独使用它们,它似乎工作。启用动作缓存后,页面加载速度很快,日志会提示它正在缓存。通过控制器(eTag、last_modified 和 fresh_when)中的 HTTP 缓存,似乎设置了正确的标头。

但是,当我尝试将两者结合起来时,它似乎是动作缓存,但 HTTP 标头始终是 max_age: 0,must_revalidate。为什么是这样?难道我做错了什么?

例如,这是我的“home”操作中的代码:

出于所有意图和目的,这应该有一个最大年龄为 10 的公共缓存控制标签,不是吗?

配置信息:

在我看来,您应该能够使用动作缓存以及反向代理,对吗?我知道他们做的事情非常相似(如果页面发生变化,代理和动作缓存都将无效并需要重新生成),但我觉得我应该能够同时拥有两者。或者我应该摆脱一个?

更新

谢谢楼下的回答!它似乎工作。但是为了避免必须为每个控制器操作编写 set_XXX_cache_header 方法,您是否看到这不起作用的任何原因?

0 投票
1 回答
3259 浏览

ruby-on-rails - Rails 应用程序的 Varnish 和 Rack-Cache 有什么意义?

对于 Rails 应用程序的 Varnish 和 Rack-Cache 的用途,我有点困惑。在config/environments/production.rb缓存中可以设置类似的东西

config.static_cache_control = "public, max-age=3600"

鉴于此,如果您可以在 Rails 应用程序本身中设置缓存,那么 Varnish 和 Rack-Cache 的目的究竟是什么?

是什么导致默认的 Rails 应用程序使用 rack-cache?