
geekout at gmail
Jun 8, 2012, 4:36 PM
Post #8 of 9
(315 views)
Permalink
|
|
Re: Additional scripts accessing the Model and Config?
[In reply to]
|
|
Hello, On Fri, Jun 8, 2012 at 11:33 AM, Luis Muñoz <luisemunoz [at] gmail> wrote: > > On Jun 8, 2012, at 5:04 PM, Tomas Doran wrote: > > > Sorry - I'm confused - how does calling into the app to get stuff as > $self->application_name->model('Foo')->some_method(@stuff) > > How does the Model, called like that, would know the details of where it > is supposed to connect? Things like the DSN, username, password, etc are in > config files whose reading is triggered "magically" by the Catalyst > infrastructure. However that is not present when running as a script. > I think the basic confusion is in that you are wanting Catalyst to "own" your Model, Config, and Log and be able to use them from a script when really what you want is to have those separate from Catalyst but used in both Catalyst and a script. DBIC is essentially doing this with the Model already. Checkout Log4perl or something similar for the Log, check out Config::JFDI for the config. I rely on an environment variable being set, both for Catalyst and my scripts. Here is an example of something at the top of one of my scripts: my $path = $ENV{MY_FANCY_APP_HOME} || die "Must set env"; use Config::JFDI; my $config_jfdi = Config::JFDI->new( name => 'my_fancy_app', path => $path ); my $config = $config_jfdi->get; use Log::Log4perl; Log::Log4perl->init_once( $path . '/log.conf' ); my $log = Log::Log4perl->get_logger('MyFancyApp'); use MyFancyApp::Model::DB; my $model = MyFancyApp::Model::DB->new( $config->{'Model::DB'} ); # Log our foo config item if we have a row in our foo table $log->info("Foo: " . $config->{foo}) if $model->resultset('FooTable')->count; And in your my_fancy_app.yaml config: foo: 'bar' 'Model::DB': schema_class: 'MyFancyApp::Schema' connect_info: dsn: 'dbi:mysql:dbname=fancyapp' user: 'root' password: 'secretpass' Then you have a $log, $config, and $model, all of which should return the same things as their respective $c context methods ($c->log, $c->config, and $c->model). You can, of course, hide all these details from your script if you like but that should get you there. > This is the reason for my question. > > -lem > > > > _______________________________________________ > List: Catalyst [at] lists > Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst > Searchable archive: > http://www.mail-archive.com/catalyst [at] lists/ > Dev site: http://dev.catalyst.perl.org/ > -- ~Tyler
|