[Dbix-class] Caching a resultset?

Jesse Sheidlower jester at panix.com
Mon Jan 14 11:30:42 GMT 2013


On Mon, Jan 14, 2013 at 10:13:44PM +1100, Peter Rabbitson wrote:
> On Sun, Jan 13, 2013 at 11:35:06PM -0500, Jesse Sheidlower wrote:
> > 
> > I have a Catalyst app that very frequently (pretty much every request)
> > requires several DBIC resultsets that return a small number of values,
> > that very rarely change. I'm trying to cache this, so I can update the
> > cache when the values change and not have to hit my DB a half-dozen
> > times on every request for data that is effectively static.
> > 
> > Originally the relevant line was along the lines of:
> > 
> >   $c->stash->{subjects} = $c->model('WordsDB::Subject')->search();
> > 
> > I replaced this, following the C::P::Cache docs, with 
> > 
> >   unless ( $c->stash->{subjects} = $cache->get( 'subjects' ) ) {
> >     $c->stash->{subjects} = 
> >         $c->model('WordsDB::Subject')->search();
> >     $cache->set( 'subject', $c->stash->{subjects} );
> >   }
> > 
> > However, this dies (on a second run, when it's actually hitting the
> > cache) with "undef error - Can't call method "select" on an undefined
> > value at /usr/share/perl5/DBIx/Class/ResultSet.pm line 957".
> 
> This is a crappy error message. Please tell us which DBIC version are
> you running exactly so that we can figure out what is on this line.

It's version 0.08196. This is in the cursor() method.

> > So I'm assuming that I can't just stuff a RS into the cache and expect 
> > it to work.
> 
> Things should just work, at least for Storable-based serialization. Need 
> more details to diagnose this.

What would you like to know?

Jesse Sheidlower



More information about the DBIx-Class mailing list