[Catalyst] Catalyst Engine Start-up Flag?

Marcello Romani mromani at ottotecnica.com
Fri Apr 27 14:55:51 GMT 2007


Lee Goddard ha scritto:
> From: Marcello Romani [mailto:mromani at ottotecnica.com] 
> 
>> Lee Goddard ha scritto:
>>> Is there a variable somewhere that can tell me when Catalyst's 
>>> dev-server is starting up?  Because it seems to be calling every
> method 
>>> I've written, but without parameters, which intentionally causes
> errors 
>>> when in production, but shouldn't during automated tests.
>>>
>>> Thanks in anticipation
>> Can you be more specific ?
>>
>> What do you mean by 'calling every method I've written ?'
> 
> Sorry: I meant when the server starts, it seems to attempt to call 'new'
> for every *.pm in MyApp::Model::* :
> 
>     Couldn't instantiate component "CTT::Model::SWF"
> 
> Thanks
> Lee
> 
> 
> [undef] | Missing fields: path, filebase, filename                |
> CTT/Model/File.pm CTT::Model::File::new 107
> [undef] | Couldn't instantiate component "CTT::Model::SWF", "Missing
> fields: path, filebase, filename at ../lib/CTT/Model/File.pm line 109
>         CTT::Model::File::new('CTT::Model::SWF', 'CTT',
> 'HASH(0x902fc10)') called at
> /usr/local/share/perl/5.8.4/Catalyst/Component.pm line 76
>         Catalyst::Component::COMPONENT('CTT::Model::SWF', 'CTT',
> 'HASH(0x902fc10)') called at /usr/local/share/perl/5.8.4/Catalyst.pm
> line 1873
>         eval {...} called at /usr/local/share/perl/5.8.4/Catalyst.pm
> line 1873
>         Catalyst::setup_component('CTT', 'CTT::Model::SWF') called at
> /usr/local/share/perl/5.8.4/Catalyst.pm line 1845
>         Catalyst::setup_components('CTT') called at
> /usr/local/share/perl/5.8.4/Catalyst.pm line 872
>         Catalyst::setup('CTT') called at ../lib/CTT.pm line 74
>         require CTT.pm called at
> /usr/local/share/perl/5.8.4/Catalyst/Test.pm line 90
>         Catalyst::Test::import('Catalyst::Test', 'CTT') called at (eval
> 3) line 2
>         main::BEGIN() called at ../lib/CTT.pm line 0
>         eval {...} called at ../lib/CTT.pm line 0
>         eval 'package main;
> use Catalyst::Test @imports;
> 
> ;' called at /usr/local/share/perl/5.8.4/Test/More.pm line 673
>         Test::More::use_ok('Catalyst::Test', 'CTT') called at 01app.t
> line 9
>         main::BEGIN() called at ../lib/CTT.pm line 0
>         eval {...} called at ../lib/CTT.pm line 0" at
> /usr/local/share/perl/5.8.4/Catalyst/Test.pm line 90
> Compilation failed in require at
> /usr/local/share/perl/5.8.4/Catalyst/Test.pm line 90.
>  | 5.8.4/Catalyst/Test.pm Catalyst::Test::import 90
> 
> _______________________________________________
> List: Catalyst at lists.rawmode.org
> Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst
> Searchable archive: http://www.mail-archive.com/catalyst@lists.rawmode.org/
> Dev site: http://dev.catalyst.perl.org/
> 
> 

I suppose your model modules have something like:

sub new {
     ...
     die unless defined ($options->{path});
     etc.
}

I've never written such Model/ modules. So far I've always used Model/ 
modules to access DBIC schemas (and CDBI before that), so I've never had 
to write a new() method for those modules.

Having said that, I think that one possible solution could be to get 
those parameters from the application config hash instead of expecting 
to have them passed to the constructor.

Or maybe you should put those modules outside the Catalyst application, 
and write a Module/ wrapper that instantiates them by calling their 
constructors with appropriate arguments.

Just my 2 (euro)cents.

HTH.

-- 
Marcello Romani
Responsabile IT
Ottotecnica s.r.l.
http://www.ottotecnica.com



More information about the Catalyst mailing list