On Aug 16, 2009, at 11:09 AM, Ovid wrote:
Hi all,

This should be painfully obvious, but I don't see it :)

For a personal project, I want users to be able to click on a letter and get a list of countries starting with that letter. I can do this:

   my $letters = $c->model('DB')->storage->dbh->selectcol_arrayref(
'select distinct(substr(name,1,1)) as letter from country order by letter'
   );
   $c->stash->{letters} = $letters;


But the country list is static and I want this available at startup. 'sub begin' fails because that's called once per request, not once per app.

What's the recommend way of handling this? (I'm using DBIx::Class for the model)

I do something like this; on my app I have a list of towns and states that I need to build from the database and is fairly static.

What I do is build it on demand and cache the results using Catalyst::Plugin::Cache and Catalyst::Plugin::Cache::Store::Memory

Because every page in my app uses this list to provide a list for searching these locales, in the auto() handler in Root.pm I check to see if the cache entry for the data structure is there and if it's not, I create it from the database and cache it. I also cache counts of entries in each town. Since these counts can change without me restarting the app, I just rebuild the cache when I add or delete a listing from a town. I never expire the cache, there's no need.

This means that the first page hit on any instance of the server takes a little while longer than usual, but it's really not a significant performance hit.
        - john romkey
        http://www.romkey.com/


_______________________________________________
List: [email protected]
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/

Reply via email to