问题标签 [action-caching]

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 投票
2 回答
5000 浏览

ruby-on-rails - 如何缓存渲染:json

我有一个返回 json 输出的控制器索引操作。

我必须在这里使用什么类型的缓存。“页面缓存”对此是否有意义。

还是我必须像下面那样做动作缓存

0 投票
1 回答
1195 浏览

ruby-on-rails - Rails 动作缓存问题

我不太确定如何确保我的缓存正常工作,但我很确定它不是。我有一个带有索引操作的用户控制器,在创建新用户之前我一直在缓存它。这是代码:

现在,当我访问index操作时,在我的日志中,我看到:

我不确定这filter chain halted ... did_not_yield是怎么回事,而且我也看到select * from users... 每次都被调用,这不是我所期望的。

有人可以告诉我这里发生了什么以及为什么这不符合我的预期吗?IE。当整个操作的输出应该被缓存时,为什么 User.all 会运行?

0 投票
2 回答
3449 浏览

ruby-on-rails - 针对用户特定记录的 Rails 动作缓存

我是一个尝试为我的应用程序实现缓存的 Rails 新手。我安装了 memcached 并将其配置在我的 development.rb 中,如下所示:

我有一个控制器 ProductsController ,它在用户登录时显示用户特定的产品。

问题是当我登录时

1) 用户 A 第一次,rails 击中我的控制器并缓存产品操作。

2)我以用户 B 的身份注销并登录,它仍然以用户 A 的身份登录,并显示用户 A 而不是用户 B 的产品。它甚至没有击中我的控制器。

关键可能是路由,在我的 memcached 控制台中,我看到它是基于相同的键获取的。

动作缓存不是我应该使用的吗?我将如何缓存和显示用户特定的产品?

谢谢你的帮助。

0 投票
1 回答
545 浏览

ruby-on-rails - Heroku 动作缓存似乎不起作用

我一直在 Heroku 上使用不同的缓存策略,并添加了他们的 memcached 插件,目的是为我的应用程序添加动作缓存。

但是,当我在当前应用程序上查看 Rails.cache.stats 时(安装了 memcached 并使用 dalli gem)在执行应该缓存的操作后,我得到 current 和 total_items 为 0。

在我想要缓存的操作的控制器顶部,我有:

另外,我修改了我的环境配置(对于在 Heroku 上运行的配置),使其具有

我可以查看其他一些统计数据以查看它是否有效或我做错了什么?

0 投票
2 回答
4571 浏览

ruby-on-rails - 使用自定义 cache_path 过期动作缓存

我在我的应用程序中使动作缓存过期时遇到了一些问题。

这是我的控制器:

我不知何故需要能够重置自定义缓存路径,但我不知道如何。

我已经尝试过使用这种技术,但没有成功。看起来我的缓存引擎 Dalli 不支持正则表达式匹配器。

尝试使用此代码时出现此错误:

expire_fragment(/songs/)

ActiveSupport::Cache::DalliStore does not support delete_matched

我尝试使用这行代码进行调试,但它被忽略了。

我正在使用 Rails 3.1.0.rc6、Dalli 1.0.5 和 Ruby 1.9.2。

0 投票
1 回答
3153 浏览

ruby-on-rails - Rails 3 缓存:如何使用带有 Action 和 Fragment 缓存的清扫器来使缓存过期?

我正在处理一个显示餐厅菜单的页面。我有 2 个模型:FoodMenu has_many :products 和 Product belongs_to :food_menu。这两种型号我都没有控制器。相反,我使用“pages_controller.rb”来显示每个 FoodMenu 及其具有“菜单”操作的产品:

我想对菜单页面 (localhost:3000/menus) 使用动作缓存,它正在工作,但是当我更新、创建或销毁产品时,我无法让缓存过期。

在“pages_controller.rb”的顶部,我有:

我尝试使用此处的示例代码为 app/sweepers 中的 Product 和 FoodMenu 模型创建单独的清扫器:http://guides.rubyonrails.org/caching_with_rails.html#sweepers 但这不起作用。然后,我在 SO 条目中读到清扫器应该观察控制器使用的所有模型,所以我认为这意味着我必须创建一个“pages_sweeper.rb”,它观察 Product 和 FoodMenu 模型并过期“菜单”动作。那也没有用。我究竟做错了什么?这是我现在在“pages_sweeper.rb”中的内容:

0 投票
2 回答
2658 浏览

ruby-on-rails - 动态设置 caches_action, :expires_in =>

caches_action我见过的每个例子都像:

但我想expires_in根据操作中使用的对象的到期时间进行设置。expires_in由于有问题的对象是基于params发送到操作的,因此在设置时有什么方法可以引用该对象?

我尝试使用

但可惜它不会让我在那里引用参数。欢迎提出建议!

0 投票
1 回答
832 浏览

ruby-on-rails - 为什么缓存清扫器需要在控制器中声明?

缓存清扫器是一个观察者,在它所观察的模型上带有一些钩子:

但是文档和指南也说要在控制器中声明清扫器:

为什么是这样?观察者的重点不是观察模型并采取行动吗?控制器不应该不必知道缓存何时到期或导致它的原因吗?

澄清

我对将清扫器设置为观察者的理解是,这意味着“在所有情况下,当更新 MyModel 时,运行此清理代码”

  1. 那准确吗?
  2. 如果是这样,那为什么cache_sweeper :my_sweeper还需要在控制器中声明呢?那有什么作用?
0 投票
1 回答
2895 浏览

ruby-on-rails - Rails caches_action 正在跳过 before_filters

我有一个控制器,我在其中缓存显示操作。show 操作有许多用于安全的 before 过滤器,如果用户未登录,而不是当前组的成员等,这些过滤器将执行和重定向。当我没有打开缓存时,这些 before 过滤器可以正常工作,但是当我翻转开关以在不再执行过滤器之前打开缓存时(我的调试器调用未命中)。

我一直认为,在为缓存操作调用过滤器之前,这是页面缓存和操作缓存之间的主要区别。这得到了Rails 缓存教程中关于动作缓存的部分的支持,该部分内容如下:

Action Caching 的工作方式与 Page Caching 类似,不同之处在于传入的 Web 请求确实从 Web 服务器发送到 Rails 堆栈和 Action Pack,以便在提供缓存之前可以在其上运行之前的过滤器。这允许运行身份验证和其他限制,同时仍提供缓存副本的输出结果。

那么为什么我之前的过滤器没有被调用呢?

关于我的设置:Rails 3.1 using Devise for authentication。我正在将 dalli gem 用于 memcached 存储。

这里有一些代码总结了我的代码(很多杂乱无章的删减):

那么,有没有人见过这种行为?我对过滤器和动作缓存应该如何工作之前的理解是否存在漏洞?或者也许我有一些奇怪的巫毒发生在一个奇怪的 gem 版本组合中?

[编辑]

有趣的是,我刚刚了解到,返回值对是否运行更远的方法没有影响,而是调用重定向或渲染。

[编辑 2]

我将我的应用程序升级到 rails 3.2.3 以查看它是否有效果,但没有解决问题。我发现,ApplicationController 中定义的过滤器被调用,但 GroupsController 中的过滤器没有。

0 投票
1 回答
702 浏览

ruby-on-rails-3 - rails3 缓存:expire_action,参数由 caches_action(GET) 缓存

我正在开发一种搜索功能,在输入内容时进行 ajax 调用以获取结果。我想在 memory_cache 中使用搜索关键字缓存搜索操作,所以我这样做:

我的问题是我如何也可以使带有参数的操作过期?还有其他方法可以使我的功能正常工作吗?