Ok, So, I''m a bad developer and have never used any sort of cacheing before. I decided it''s time I step up and I threw in some memcached magic. I''m still pretty new to all this, so I''m confused on how some things work. I''ve watched the railscast on cacheing, and gone through many tutorials. So, the problem I''m having is that I have this page being cached, and it''s not updating the page when I do any sort of CRUD action on the model primarily used on this page. Here is what I have class SiteController < ApplicationController caches_action :index def index #this in my home page end en class ListingsController < SiteController #This is the page being cached def index @listings = Listing.all end end class ListingSweeper < ActionController::Caching::Sweeper observe Listing def after_save(listing) expire_cache(listing) end def after_update(listing) expire_cache(listing) end def after_destroy(listing) expire_cache(listing) end def expire_cache(listing) expire_action root_path expire_action listings_path end end When I create a new Listing, or update or destroy an existing one, it should clear the cache of the ListingsController#index, right? When I go the the page, and refresh over and over, this is what pops up in my production.log Processing ListingsController#index (for 12.34.567.58 at 2010-03-31 17:13:29) [GET] Filter chain halted as [#<ActionController::Filters::AroundFilter:0x2aaaae2804c8 @options={:if=>nil, :unless=>nil, :only=>#<Set: {"contact", "index"}>}, @method=#<Proc:0x00002aaaac2a3ec0@/var/rails/app/releases/20100331171209/vendor/rails/actionpack/lib/action_controller/caching/actions.rb:64>, @kind=:filter, @identifier=nil>] did_not_yield. Completed in 2ms (View: 0, DB: 0) | 200 OK [http://245.254.135.24/listings] Anyone have a good link for a tutorial I can get, or maybe an idea or what I might be missing? Any help is much appreciated! Thanks, ~Jeremy -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Another odd thing maybe someone can clear up for me. In my sweepers I currently have: def expire_cache expire_action root_path end but my cache isn''t being expired, so I figured I would put the route in manually def expire_cache expire_action :controller => ''site'', :action => ''index'' end and I get this error: ActionController::RoutingError (No route matches {:controller=>"admin/site", :action=>"index"}): Now, obviously I''m updating the model in the admin section, but I''m not specifying my controller to be ''admin/site''. I just want to update object in the admin section, and update the cache on the front end of the site. -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Have you added the sweeper to your list of observers in config/ environment.rb? On Mar 31, 2:43 pm, Jeremy Woertink <li...-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> Another odd thing maybe someone can clear up for me. > > In my sweepers I currently have: > > def expire_cache > expire_action root_path > end > > but my cache isn''t being expired, so I figured I would put the route in > manually > > def expire_cache > expire_action :controller => ''site'', :action => ''index'' > end > > and I get this error: > > ActionController::RoutingError (No route matches > {:controller=>"admin/site", :action=>"index"}): > > Now, obviously I''m updating the model in the admin section, but I''m not > specifying my controller to be ''admin/site''. I just want to update > object in the admin section, and update the cache on the front end of > the site. > -- > Posted viahttp://www.ruby-forum.com/.-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
David wrote:> Have you added the sweeper to your list of observers in config/ > environment.rb?Actually, I had not. I had another sweeper, and my user observer in there. I will try that out, and post back what happens :) -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Jeremy Woertink wrote:> David wrote: >> Have you added the sweeper to your list of observers in config/ >> environment.rb? > > Actually, I had not. I had another sweeper, and my user observer in > there. I will try that out, and post back what happens :)fail :( config.active_record.observers = :user_observer, :listing_sweeper This is what I should have, right? -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Have you added sweeper path ? config.load_paths += %W( #{RAILS_ROOT}/app/sweepers) On Apr 1, 1:53 am, Jeremy Woertink <li...-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> Jeremy Woertink wrote: > > David wrote: > >> Have you added the sweeper to your list of observers in config/ > >> environment.rb? > > > Actually, I had not. I had another sweeper, and my user observer in > > there. I will try that out, and post back what happens :) > > fail :( > > config.active_record.observers = :user_observer, :listing_sweeper > > This is what I should have, right? > -- > Posted viahttp://www.ruby-forum.com/.-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Quy Doan wrote:> Have you added sweeper path ? > config.load_paths += %W( #{RAILS_ROOT}/app/sweepers)Yes, and they seem to load ok. I don''t get any errors for uninitialized constants or anything. Environment.rb RAILS_GEM_VERSION = ''2.3.5'' unless defined? RAILS_GEM_VERSION require File.join(File.dirname(__FILE__), ''boot'') Rails::Initializer.run do |config| config.load_paths << "#{RAILS_ROOT}/app/sweepers" config.active_record.observers = :user_observer, :listing_sweeper end Production.rb config.cache_classes = true config.action_controller.consider_all_requests_local = false config.action_controller.perform_caching = true config.action_view.cache_template_loading = true config.cache_store = :mem_cache_store config/initializers/cache_money.rb if RAILS_ENV != ''development'' require ''cache_money'' config = YAML.load(IO.read(File.join(RAILS_ROOT, "config", "memcached.yml")))[RAILS_ENV] $memcache = MemCache.new(config) $memcache.servers = config[''servers''] $local = Cash::Local.new($memcache) $lock = Cash::Lock.new($memcache) $cache = Cash::Transactional.new($local, $lock) class ActiveRecord::Base is_cached :repository => $cache end else class ActiveRecord::Base def self.index(*args) end end end Thanks for all the suggestions. Please, if anyone else has any shoot ''em my way. I''m running late on the app, so I might have to just drop the cache part (which I don''t want to do). Thanks, ~Jeremy -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Hi, Jeremy Woertink wrote:> Ok, So, I''m a bad developer and have never used any sort of cacheing > before. I decided it''s time I step up and I threw in some memcached > magic. I''m still pretty new to all this, so I''m confused on how some > things work. I''ve watched the railscast on cacheing, and gone through > many tutorials. > > So, the problem I''m having is that I have this page being cached, and > it''s not updating the page when I do any sort of CRUD action on the > model primarily used on this page. > > Here is what I have > > class SiteController < ApplicationController > caches_action :index > > def index > #this in my home page > end > en > > class ListingsController < SiteController > #This is the page being cached > def index > @listings = Listing.all > end > end > > class ListingSweeper < ActionController::Caching::Sweeper > observe Listing > > def after_save(listing) > expire_cache(listing) > end > > def after_update(listing) > expire_cache(listing) > end > > def after_destroy(listing) > expire_cache(listing) > end > > def expire_cache(listing) > expire_action root_path > expire_action listings_path > end > > end >It seems to me that you miss to specify the cache sweeper in the controller. In your case, try to add this: class SiteController < ApplicationController caches_action :index cache_sweeper :listing_sweeper Regards, .Viet Trung. -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.