[Catalyst] Catalyst configuration problem with more than one mod_perl configuration
Albert Vila
avp at imente.com
Wed Mar 8 18:13:42 CET 2006
I'm having trouble with the Catalyst configuration under mod_perl,
but only if I have more than one catalyst application in the same
machine.
I'm using an extra module to deal with configurations, because I need
to load more configuration files in the same catalyst application.
My configuration object looks like:
package Util::Config;
# Object
my $object = undef;
# Init base configuration
sub init_base {
my ($self) = shift;
return if (defined $object->{_FLAG_BASE_CONFIG});
my $base_conf = 'Conf/base.yml';
foreach my $lib (@INC) {
if (-e ($lib.'/'.$base_conf)) {
$base_conf = $lib.'/'.$base_conf;
last;
}
}
# Load base configuration
use YAML 'LoadFile';
my $base_options = LoadFile($base_conf);
# Flag
$object->{_FLAG_BASE_CONFIG} = 1;
# Inicialitzem la configuració base de l'aplicació
Util::Config->init($base_options);
}
# Init configuration
sub init {
my ($self, $file) = (@_);
# Init base configuration
$self->init_base();
# Init catalyst configuration
if (ref($file) eq 'HASH') {
foreach my $key (keys %{$file}) {
$object->{$key} = $file->{$key};
}
}
}
# Gets the configuration entry
sub get {
my ($self, $key) = (@_);
return $object->{$key};
}
#Fi
1;
I use the object this way inside the catalyst application:
__PACKAGE__->config( 'config_file' => 'conf/X.yml' );
Util::Config->init( __PACKAGE__->config );
and then I get the values using Util::Config->get('xxxx').
When I only load the X application with mod_perl all works fine, but
If I load the X and the Y application, the configuration get mess.
For example (I assume the X application loads first with mod_perl),
then in the Y application:
...
use Catalyst;
__PACKAGE__->config( 'config_file' => 'conf/Y.yml' );
Util::Config->init( __PACKAGE__->config );
[1] die Util::Config->get('root')."-".__PACKAGE__->config->{root};
sub begin {
my ($self, $c) = @_;
[2] die Util::Config->get('root')."-".$c->config->{root};
}
...
In this scenario, I get the following results:
[1]-> /path/Y - /path/Y
but in
[2]-> /path/X - /path/Y
Anyone has a clue why in the second log i get the X root path using
the Util::Config object?
Thanks if anyone can help. I'll apreciate.
Albert
More information about the Catalyst
mailing list