[Catalyst] Handling configuration outside the Catalyst
application
Bill Moseley
moseley at hank.org
Fri Aug 28 02:58:13 GMT 2009
On Thu, Aug 27, 2009 at 7:10 PM, Daniel Austin <daniel.austin at gmail.com> wrote:
>
> Hello
>
> How are you handling configuration for applications or code that run
> outside of Catalyst?
>
> For example, in my model tests, I have code like this:
>
> use MyCompany::CatApp;
> my $app = MyCompany::CatApp->new();
> my $model = $app->model('DB::Model')->new({});
> ok( $model->insert );
>
> etc.
>
> This way the model tests are talking to the right database as
> configured for that environment. But it seems slow to run and it's not
> the right coupling if I have, say, a cronjob that wants to use the
> same models.
>
> Are there any patterns anyone can recommend?
I have a config module that I use everywhere. I specify a running
"mode", such as testing, staging, and production so that the correct
config is pulled.
$ script/dump_config.pl --mode=production log4perl
{
enable => 1,
level => "info",
}
$ script/dump_config.pl --mode=development log4perl
{
enable => 1,
level => "debug",
}
Catalyst uses a plugin for that module. I also have another module
that uses that configuration class. It makes it easy to write cron
scripts.
#!/usr/bin/perl
use App::ConfigUtil;
# define options for this script
my %options = (
minutes_old => {
help => 'Items must be "minutes_old" to be removed"
format => '=i',
default => 60,
},
);
my $app = App::ConfigUtil->new( \%options );
my $config = $app->config; # same config Catalyst sees
my $db = $app->database;
$app->lock(20); # lock this cron job for 20 seconds (since running on
multiple servers)
$db->model( 'Foo' )->remove_old;
Then it's just ./clean_foo --mode=production --minutes_old=120
But, now I'm thinking about making all access go through Catalyst.
That is, a cron job would log in via the API and then use and API
method to do its work. Wouldn't need to be a web request, of course.
Then I've got one access layer to the application and can have ACL
rules for the cron user and unified logging.
--
Bill Moseley
moseley at hank.org
More information about the Catalyst
mailing list