Tag: 缓存

如何在Rails中缓存Model对象?

是否有一种技术可以在Rails中使用,这样每当在Model对象上执行简单的“查找”时,首先会在memcached中搜索结果,但只有在找不到结果时才会对数据库进行查询? 理想情况下,我希望解决方案是隐式的,这样我就可以编写Model.find(id),它首先检查缓存,如果需要数据库查询,则返回的对象被添加到缓存中,即我不要不需要用附加代码包装Model.find(id)来检查缓存是否匹配内容。 谢谢!

如何将caches_action配置为适用于多种格式?

我有一个rails动作,它响应各种格式的请求,包括AJAX请求,例如: def index # do stuff respond_to do |format| format.html do # index.html.erb end format.js do render :update do |page| page.replace_html ‘userlist’, :partial => “userlist”, :object=>@users page.hide(‘spinner’) page.show(‘pageresults’) end end end end 我已使用memcached将此操作设置为缓存: caches_action :index, :expires_in=>1.hour, :cache_path => Proc.new { |c| “index/#{c.params[:page]}/#{c.request.format}” } 这种模式似乎适用于缓存HTML结果,但不适用于JS结果。 当JS部分不是来自缓存时,它总能正常工作。 但是,当存在缓存命中时,页面不会更新。 什么可能导致这个和什么是修复? 更新:深入研究这一点,看起来缓存中的请求获取mime类型’text / html’而不是’text / javascript’。 但是我不知道如何解决这个问题 – 它是memcached的怪癖吗? […]

生产中的Rails路由损坏 – 怀疑route.rb的缓存

更新:原来这个问题是因为我的杂种的一半没有重启。 谢谢大家的帮助! 嗨伙计们,我有一个紧急的问题。 基本上,我的路由可以在我的localhost上运行。 但是当我将其部署到生产环境时,路由似乎无法正常工作。 例如,给定一个新的路线“/邀请” – 有时我会得到一个404,有时它会正常工作。 我怀疑某处有一些缓存,但我不确定。 日志:当找不到页面时(当路线准确时) 处理UsersController #network(适用于2010-06-01 09:59:31的67.180.78.126)[GET]参数:{“id”=>“new”} ActionController :: RoutingError(没有路由匹配“/ comm / role_playing_games”和{}): app / controllers / application_controller.rb:383:在prev_page_label’ app/controllers/application_controller.rb:238:in prev_page_label’ app/controllers/application_controller.rb:238:in prev_page_label’ app/controllers/application_controller.rb:238:in log_timed_info’ app / controllers / users_controller.rb:155:in network’ app/controllers/users_controller.rb:151:in network’ app/controllers/users_controller.rb:151:in network’ app/controllers/users_controller.rb:151:in网络中’ app / controllers / application_controller.rb:44:in turn_on_query_caching’ app/controllers/application_controller.rb:43:in turn_on_query_caching’ app/controllers/application_controller.rb:43:in turn_on_query_caching’ app/controllers/application_controller.rb:43:in turn_on_query_caching’ app / […]

如何使具有翻译的视图的缓存无效?

想象一下,您有两个视图,其代码如下: controller_a / a.html.erb controller_b / b.html.erb 因此, a.html.erb位于controller_a a.html.erb上,而b.html.erb位于controller_b#b上。 这两个操作都由caches_action缓存。 如何确保在更改some.key转换键时,两个视图都无效? 我怎样才能构建通用机制?

即使在重新启动服务器之后,Rails dev环境也不会更新html / css / assets

我一直在用铁轨开发一个网站,一切都比较顺利。 突然间,我对视图和资产的更改不再显示。 我更改样式表或某些HTML并在http://0.0.0.0:3000重新加载我的浏览器,没有任何变化。 所以我重新启动WEBrick仍然没有改变。 如果我完全改变图像,情况就是如此。 获得新更改的唯一方法是预编译资产: C:\Users\me\website>rake assets:precompile C:/Ruby193/bin/ruby.exe C:/Ruby193/bin/rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets 为什么将生产显示为RAILS_ENV? 也许我的开发环境不知何故变成了生产环境? 但即便如此,我也不需要预先编译资产来反映变化。 无论如何Rails.env.development? 返回true和Rails.env.production? 在控制器和erb文件中返回false 。 我试过删除我的/ tmp目录无济于事。 我必须将以下行添加到config / application.rb才能让Heroku使用指南针: config.assets.initialize_on_precompile = false 但是,删除该行无论如何都无助于我的问题。

Rails缓存:为一个操作过期多个页面

我已经在我的应用程序中设置了动作缓存(使用清扫器,但我认为这与此无关),到目前为止,除了一件事之外它的效果很好: 我使用Kaminari进行分页,因此当我对我的动作执行expire_action ,它只会到达第一页。 我知道使用查询字符串指定页面时缓存不起作用,我设置了一个路由,以便将页面附加到URL的末尾(例如/ people / 123 / page / 2)。 如果有必要,我会在这篇文章中添加更多信息,但我猜这里有一些显而易见的东西,所以:任何人都知道如何使我的其余页面过期?

一旦启用了动作缓存,format.js就不会操作dom

注意:我在这里提出一个逻辑我在做什么。 我在做什么: 考虑我们列出产品和分页的基本索引操作。 现在使用remote-true选项我启用了基于ajax的分页。 到目前为止,事情完美无缺。 看看示例代码。 产品控制器: def index @products = Product.paginate(:order =>”name ASC” ,:page => params[:page], :per_page => 14) respond_to do |format| format.html # index.html.erb format.json { render json: @products } format.js end end Index.html.erb Products // products partial is just basic html rendering $(function(){ $(‘.pagination a’).attr(‘data-remote’, ‘true’) }); index.js.erb的 jQuery(‘#products’).html(” ‘products/products’ ) %>”); […]

Rails缓存的默认到期时间是多少?

我做了一些谷歌搜索,无法找到这个问题的答案。 Rails允许指定其缓存的到期时间,如下所示: Rails.cache.fetch(“my_var”, :expires_in => 10.seconds) 但如果我什么都没说,会发生什么: Rails.cache.fetch(“my_var”) 它永不过期? 有默认值吗? 我如何明确定义永不过期的东西?

rails如何使用部分匹配删除缓存键

我正在使用redis-rails。 对于缓存键,我使用的是数组: Rails.cache.fetch([self.class.name, :translated_attribute, id, field, I18n.locale]) do self.read_attribute field, locale: I18n.locale end 现在我需要删除与[self.class.name,:translated_attribute,id]的键匹配的所有缓存。 我知道它有delete_matched ,在部分匹配的键之后需要使用通配符(*)。 但我不知道生成的确切密钥是什么。 现在我需要知道当我们使用数组作为键时它是如何产生键的。 我的意思是如果我使用[:foo,:bar,:dum]作为缓存键,那么缓存存储中的确切键是什么?

如何在语言环境发生变化时使片段缓存失效?

我正在尝试使用片段缓存来缓存使用I18n的Ruby on Rails站点上的页脚和导航栏。 问题是,更改语言然后会以错误的语言显示页脚和导航栏。 当语言环境发生变化时,如何使片段缓存失效?